如何过滤 select 作为 class LINQ 属性的列表?

How to filter and select a List that is an attribute of a class LINQ?

我有一个Privilege

public class Privilege
{
   public virtual string Name { get; set; }
   public virtual ICollection<Role> Roles { get; set; } = new List<Role>();

}

我有一个角色,其中包含 Privilege 的集合和 Privilege 所属的相应 UserType

public class Role
{
    public virtual ICollection<Privilege> Privileges { get; set;} = new List<Privilege>();
    public virtual UserType UserType { get; set;}
}

我正在尝试从仅包含 Privileges 的特权回购中获取 List<Privilege>,其中 Role 我通过了。我的问题有点令人困惑,因为 类 都有另一个的集合,而且这个代码库非常像意大利面条,无法更改。

这是我的尝试,问题是我实际上无法获得 List<Privilege> 而是取回这个疯狂的 IQueryable<IEnumerable<ICollection<Privilege>>> 变量。

_privRepo.Query().Select(p => p.Roles.ToList().Where(r => r.UserType == UserType.Manager).Select(x => x.Privileges);

假设 _privRepo 是一个 entityFramework DbContext,我会说这样的东西应该可以解决问题:

var privileges = _privRepo.Where(p => p.Roles.Any(r => r.UserType == UserType.Manager)).ToList();

或异步版本

var privileges = await _privRepo.Where(p => p.Roles.Any(r => r.UserType == UserType.Manager)).ToListAsync();

你必须重构你的代码,如果它是多对多关系那么应该有另一个 class 来建立它们之间的关系。

https://docs.microsoft.com/en-us/ef/core/modeling/relationships

尽管您找到了查询的解决方法。