lambda表达式使用select和where子句连接多个表

我有三个表多对多关系我已加入三个表并选择我想要的值但现在我需要从查询结果中选择一行通过指定id这是我的三个表

这是使用LINQ lambda表达式的查询:

 DataBaseContext db = new DataBaseContext(); public ActionResult Index() { var UserInRole = db.UserProfiles. Join(db.UsersInRoles, u => u.UserId, uir => uir.UserId, (u, uir) => new { u, uir }). Join(db.Roles, r => r.uir.RoleId, ro => ro.RoleId, (r, ro) => new { r, ro }) .Select(m => new AddUserToRole { UserName = mruUserName, RoleName = m.ro.RoleName }); return View(UserInRole.ToList()); } 

结果就像使用sql查询一样

sql查询

 select * from UserProfile u join webpages_UsersInRoles uir on u.UserId = uir.UserId join webpages_Roles r on uir.RoleId = r.RoleId 

sql查询的结果

现在我使用anther sql查询过滤预览sql查询的结果,并将条件设置为where u.UserId = 1 ,只给我一个id为1的用户

 select * from UserProfile u join webpages_UsersInRoles uir on u.UserId = uir.UserId join webpages_Roles r on uir.RoleId = r.RoleId where u.UserId = 1 

以及此sql查询的结果

那么我怎样才能将where clause添加到我的lambda表达式中,以便给出与sql查询结果相同的结果并感谢任何帮助

如果我理解你的问题,你需要做的就是添加.Where(m => mruUserId == 1):

  var UserInRole = db.UserProfiles. Join(db.UsersInRoles, u => u.UserId, uir => uir.UserId, (u, uir) => new { u, uir }). Join(db.Roles, r => r.uir.RoleId, ro => ro.RoleId, (r, ro) => new { r, ro }) .Where(m => mruUserId == 1) .Select (m => new AddUserToRole { UserName = mruUserName, RoleName = m.ro.RoleName }); 

希望有所帮助。

我正在寻找一些东西,我找到了这篇文章。 我发布了这个管理多对多关系的代码,以防有人需要它。

  var UserInRole = db.UsersInRoles.Include(u => u.UserProfile).Include(u => u.Roles) .Select (m => new { UserName = u.UserProfile.UserName, RoleName = u.Roles.RoleName });