DSh*_*ook 5 many-to-many entity-framework
我有一些我想加入的桌子:
我想要生成的等效sql是类似的
select * from Users u
inner join UserRoles ur on u.UserId = ur.UserId
inner join WorkflowRoles wr on wr.RoleId = ur.RoleId
inner join Workflow w on wr.WorkflowId = w.Id
where u.Id = x
Run Code Online (Sandbox Code Playgroud)
我希望根据用户在一个查询中的角色来获取用户所属的所有工作流.我发现你可以得到这样的结果:
user.Roles.SelectMany(r => r.Workflows)
Run Code Online (Sandbox Code Playgroud)
但这会为每个角色生成一个明显不太理想的查询.
是否有一个正确的方法来做到这一点,而不必诉诸于生成视图或编写直接sql的黑客?
您可以尝试以下两个查询:
我认为这个更易读;
var workflows = context.Users
.Where(u => u.UserId == givenUserId)
.SelectMany(u => u.Roles.SelectMany(r => r.Workflows))
.Distinct()
.ToList();
Run Code Online (Sandbox Code Playgroud)
(Distinct因为用户可以有两个角色,这些角色可能包含相同的工作流程.Distinct不会返回重复的工作流程.)
但是我认为这个表现更好
var workflows = context.WorkFlows
.Where(w => w.Roles.Any(r => r.Users.Any(u => u.UserId == givenUserId)))
.ToList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4877 次 |
| 最近记录: |