使用LINQ GroupBy获得不同的结果以实现复杂的实体关系?

时间:2013-12-17 00:17:17

标签: c# linq entity-framework

以下是我的人际关系的简要概述:

one Account has many AccountRoles
one AccountRole has many UserAccountRoles
many UserAccountRoles can have one User

我需要获得的是一组User的所有Account

如何在LINQ中执行此操作?

编辑:

这是我到目前为止所尝试的内容:

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;

userDTOsreturn的集合集合。这对我来说没什么意义。

2 个答案:

答案 0 :(得分:1)

由于最终你想要的只是一个用户的扁平化集合,你应该能够使用SelectMany()来平展一对多关系,然后在最后调用Distinct():< / p>

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();

答案 1 :(得分:1)

或者你可以走另一条路:

from u in context.Users
where u.UserAccountRoles.Any(uar=>uar.AccountRole.Account.Id == someAccountId)