如何过滤 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
尽管您找到了查询的解决方法。
我有一个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
尽管您找到了查询的解决方法。