Linq Join Select 以返回平展列表
本文关键字:列表 返回 Join Select Linq | 更新日期: 2023-09-27 18:35:39
>我有以下 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();
我的结果是List<ICollection<Permission>>
。如何正确执行此操作以在所有角色中拥有一个平面列表?我不知道该怎么做。
将ToList()
替换为 SelectMany(x => x).ToList()
。
使用查询语法中的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();
请注意,您需要在Permission
中实现Equals
和GetHashCode
才能有意义地使用Distinct
。
您可以使用 SelectMany
var result = (from ru in RoleUserStore
join role in RoleStore on ru.RoleId equals role.Id
where ru.UserId == user.Id
select role.Permissions)
.SelectMany(user => user).ToList();
这就是SelectMany所做的,我引用MSDN。
Projects each element of a sequence to an IEnumerable(Of T) and flattens the resulting sequences into one sequence.