以下是我的人际关系的简要概述:
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;
userDTOs
是return
的集合集合。这对我来说没什么意义。
答案 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)