C# 对于复杂的实体关系,是否使用LINQ GroupBy获得不同的结果?
以下是我的人际关系的简要概述:C# 对于复杂的实体关系,是否使用LINQ GroupBy获得不同的结果?,c#,linq,entity-framework,C#,Linq,Entity Framework,以下是我的人际关系的简要概述: one Account has many AccountRoles one AccountRole has many UserAccountRoles many UserAccountRoles can have one User 我需要为一个帐户获取一组所有用户s 在林克我该怎么做 编辑: 以下是我迄今为止所尝试的: var dto = _context.Set<Model.Account>() .Find(account.Id); if
one Account has many AccountRoles
one AccountRole has many UserAccountRoles
many UserAccountRoles can have one User
我需要为一个帐户
获取一组所有用户
s
在林克我该怎么做
编辑:
以下是我迄今为止所尝试的:
var dto = _context.Set<Model.Account>()
.Find(account.Id);
if (dto == null)
return null;
var userAccountRoleDTOs = dto.AccountRoles
.Select(ar => ar.UserAccountRoles);
var userDTOs = userAccountRoleDTOs
.Select(uar => uar.Select(uar2 => uar2.User));
return userDTOs;
var dto=\u context.Set()
.Find(account.Id);
if(dto==null)
返回null;
var userAccountRoleDTOs=dto.AccountRoles
.Select(ar=>ar.UserAccountRoles);
var userDTOs=userAccountRoleDTOs
.Select(uar=>uar.Select(uar2=>uar2.User));
返回userDTOs;
userDTOs
是return
上的集合集合。这对我来说没有多大意义。因为最终你想要的只是一个用户的扁平化集合,你应该能够使用SelectMany()
扁平化一对多关系,然后在最后调用Distinct()
:
var users = dto.AccountRoles
.SelectMany(ar => ar.UserAccountRoles.Select(uar => uar.User))
.Distinct();
或者,以查询形式
var users = (from ar in dto.AccountRoles
from uar in ar.UserAccountRoles
select uar.User)
.Distinct();
或者你也可以反过来:
from u in context.Users
where u.UserAccountRoles.Any(uar=>uar.AccountRole.Account.Id == someAccountId)
@Ic我自己已经尝试过构建这个表达式,但没有多大意义。每次我尝试
Select()
或GroupBy()
某些实体时,我调用的方法会公开更多的集合扩展方法,而不是我试图访问的属性。@Ic我更新了我的问题。你应该安装LinqPad并在其中尝试查询。您可以更好地可视化您的查询,这可能会对您有所帮助。@Enigmativity我会尝试一下,谢谢。嗯,也许我没有正确理解这些关系。