假设我有以下数据库:

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/

10-13 06:00