C# 使用LINQ Lambda表达式的导航属性条件
我正试图根据用户所属的组,提取所有C# 使用LINQ Lambda表达式的导航属性条件,c#,asp.net,entity-framework,linq,contains,C#,Asp.net,Entity Framework,Linq,Contains,我正试图根据用户所属的组,提取所有机构和非垃圾机构用户。机构有机构用户和机构用户有调查组(机构也有组)。我知道自己哪里有问题,非常感谢您的帮助 public class InstitutionRepository : IInstitutionRepository { public IEnumerable<Institution> GetInstitutionGroupUsers(IEnumerable<int> groupIds) { us
机构
和非垃圾机构用户
。机构
有机构用户
和机构用户
有调查组
(机构也有组)。我知道自己哪里有问题,非常感谢您的帮助
public class InstitutionRepository : IInstitutionRepository
{
public IEnumerable<Institution> GetInstitutionGroupUsers(IEnumerable<int> groupIds)
{
using (var context = new GameDbContext())
{
return context.Institutions
.Include(i => i.InstitutionUsers)
.Where(i => i.InstitutionUsers
.Select(g => g.IsTrashed)
.Contains(false) && groupIds.Contains(i.InstitutionUsers.Select(g => g.InvestigatorGroupUsers.Select(x => x.InvestigatorGroupId)))).ToArray().ToList();
}
}
公共类机构存储库:IInstitutionRepository
{
公共IEnumerable GetInstitutionGroupUsers(IEnumerable GroupId)
{
使用(var context=new GameDbContext())
{
返回上下文。机构
.包括(i=>i.InstitutionUsers)
.其中(i=>i.InstitutionUsers
.选择(g=>g.IsTrashed)
.Contains(false)和&groupid.Contains(i.InstitutionUsers.Select(g=>g.investorgroupusers.Select(x=>x.investorgroupid))).ToArray().ToList();
}
}
如果我理解正确,您希望获得一个
机构的列表,该机构至少有一个机构用户,且IsTrashed=false
,并且与通过的组Id
过滤器中包含的至少一个调查组Id
相关联
如果这是真的,那么下面的查询应该会生成所需的结果
return context.Institutions
.Include(i => i.InstitutionUsers)
.Where(i => i.InstitutionUsers.Any(u => !u.IsTrashed &&
u => u.InvestigatorGroupUsers.Any(gu => groupIds.Contains(gu.InvestigatorGroupId))))
.ToList();