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

Fad*_*adi 22 c# linq asp.net-mvc entity-framework join

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

这是使用LINQlambda表达式的查询:

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 = m.r.u.UserName,
            RoleName = m.ro.RoleName
        });

    return View(UserInRole.ToList());
}
Run Code Online (Sandbox Code Playgroud)

结果就像使用sql查询一样

sql 询问

select * 
from UserProfile u join webpages_UsersInRoles uir on u.UserId = uir.UserId 
                   join webpages_Roles r on uir.RoleId = r.RoleId 
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

以及此sql查询的结果

那么我怎么能添加clause我的lambda表达式的位置给我与sql查询结果相同的结果,并感谢任何帮助

Rad*_*cal 31

如果我理解你的问题,你需要做的就是添加.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 => m.r.u.UserId == 1)
        .Select (m => new AddUserToRole
        {
            UserName = m.r.u.UserName,
            RoleName = m.ro.RoleName
        });
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.