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我会尝试一下,谢谢。嗯,也许我没有正确理解这些关系。