假设我有以下数据库:
Users
-------
UserId (PK)
UserName
Roles
-----
RoleId (PK)
RoleName
UserRoles
---------
UserId (PK)
RoleId (PK)
用户 1-M UserRoles M-1 角色
使用 LinqToSQL,我想返回以下集合:
[User1], [Role1, Role2, Role3]
[User2], [Role2, Role3]
[User3], []
等等...
创建此 LinqToSql 查询的最有效方法是什么?
另外,如果我想创建一个过滤器来只返回具有 Role1 的用户,那会带来什么?
谢谢。
最佳答案
定义“高效”。然而在其他方面...
from u in dataContext.Users
select new { User = u, Roles = u.UserRoles.Select(ur => ur.Role) }
并通过
RoleID
过滤用户:from u in dataContext.Users
where u.UserRoles.Any(ur => ur.RoleID == 1)
select u
或者通过其他一些
Role
属性,比如 Name
:from u in dataContext.Users
where u.UserRoles.Any(ur => ur.Role.Name == "Role 1")
select u
将它们组合在一起:
from u in dataContext.Users
select new
{
User = u,
Roles = from ur in u.UserRoles
where ur.RoleID == 1 || ur.Role.Name == "Role 1"
select ur.Role
}
关于c# - Linq 合并左连接数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1488414/