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 子句连接多个表的主要内容,如果未能解决你的问题,请参考以下文章
列表 <> 上的 Select 和 ForEach [重复]
取代DataTable Select方法 并动态拼接Lambda表达式
lambda表达式中如何在group by 后将查询出的字段象sql一样使用as定义一个名 比如select a as C from b