【问题标题】:lambda expression join multiple tables with select and where clauselambda 表达式使用 select 和 where 子句连接多个表
【发布时间】:2014-05-19 10:11:30
【问题描述】:

我有三个表的多对多关系我已经加入了三个表并选择了我想要的值但是现在我需要从查询结果中选择一行通过指定 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 = m.r.u.UserName,
            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 查询 by where 并将条件设置为 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 查询结果相同的结果,感谢您的帮助

【问题讨论】:

标签: c# asp.net-mvc linq entity-framework join


【解决方案1】:

如果我正确理解您的问题,您只需添加 .Where(m => m.r.u.UserId == 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
        });

希望对您有所帮助。

【讨论】:

  • 在这部分u => u.UserId, uir => uir.UserId u.UserId 意思是 db.userProfiles.UserId ?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2022-10-04
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    • 2012-02-14
    • 1970-01-01
    相关资源
    最近更新 更多