C# Linq Join Select返回展开列表

C# Linq Join Select返回展开列表,c#,linq,C#,Linq,我有以下Linq声明: var permissions = (from ru in RoleUserStore join role in RoleStore on ru.RoleId equals role.Id where ru.UserId == user.Id select role.Permissions).ToList(); 我的结果是一个列表。我如何正确地做到这一点,以便在

我有以下Linq声明:

var permissions = (from ru in RoleUserStore
                  join role in RoleStore on ru.RoleId equals role.Id
                  where ru.UserId == user.Id
                  select role.Permissions).ToList(); 
我的结果是一个
列表
。我如何正确地做到这一点,以便在所有角色中都有一个平面列表?我想不出怎么做。

ToList()
替换为
SelectMany(x=>x)。ToList()
您可以使用

这就是SelectMany所做的,我引用MSDN


将序列中的每个元素投影到一个IEnumerable(of T)中,并将结果序列展平为一个序列。
使用
SelectMany
,其查询语法为:

var permissions = from ru in RoleUserStore
                  join role in RoleStore on ru.RoleId equals role.Id
                  where ru.UserId == user.Id
                  from permission in role.Permissions
                  select permission;

 // if you don't want repeating permissions use Distinct:
List<Permission> permissionList = permissions.Distinct().ToList();
var permissions=来自RoleUserStore中的ru
在ru.RoleId等于role.Id的RoleStore中加入角色
其中ru.UserId==user.Id
来自角色中的权限。权限
选择权限;
//如果不希望重复权限,请使用Distinct:
List permissionList=permissions.Distinct().ToList();

请注意,您需要在
权限
中实现
Equals
GetHashCode
,才能有意义地使用
Distinct

我认为SelectMany是您所需要的。您可能需要向其中添加
.Distinct()
,以删除所有重复项。
var permissions = from ru in RoleUserStore
                  join role in RoleStore on ru.RoleId equals role.Id
                  where ru.UserId == user.Id
                  from permission in role.Permissions
                  select permission;

 // if you don't want repeating permissions use Distinct:
List<Permission> permissionList = permissions.Distinct().ToList();