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

Posted

技术标签:

【中文标题】lambda 表达式使用 select 和 where 子句连接多个表【英文标题】:lambda expression join multiple tables with select and where clause 【发布时间】: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 查询结果相同的结果,感谢您的帮助

【问题讨论】:

请参考***.com/questions/1524813/… 【参考方案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
    );

【讨论】:

以上是关于lambda 表达式使用 select 和 where 子句连接多个表的主要内容,如果未能解决你的问题,请参考以下文章

Lambda表达式中 select 怎么动态添加查询字段

列表 <> 上的 Select 和 ForEach [重复]

取代DataTable Select方法 并动态拼接Lambda表达式

lambda表达式中如何在group by 后将查询出的字段象sql一样使用as定义一个名 比如select a as C from b

对如何在 ruby​​ 中使用 lambda 进行选择感到困惑

Lambda 表达式 order by 和 take issue