在 EntityFramework 中加入两个 M:N 关系

Posted

技术标签:

【中文标题】在 EntityFramework 中加入两个 M:N 关系【英文标题】:Join two M:N relations in EntityFramework 【发布时间】:2015-07-24 12:00:54 【问题描述】:

看看下面我的模型,

    每个用户都有 n 个角色 每个角色获得 n 个权限/每个权限获得 n 个角色

我正在尝试获取用户权限,以便能够在其上执行 group by, 我该怎么办?

我打算编写如下所示的 LINQ 查询:

from uRole in context.Users.Single(u => u.Id == userId).Roles
     join p in context.Permission.Where(p => p.Type == ModelEnums.PermissionType.Module)

我不知道如何编写查询,有人可以指导我吗?

【问题讨论】:

那么,您为什么不编写和测试查询的输出并告诉我们结果/问题? 问题是我不知道怎么写查询。 【参考方案1】:

要获取所有用户的权限,您可以使用SelectMany 扩展方法:

var permissions=context.Users.Single(u => u.Id == userId).Roles.SelectMany(r=>r.Permissions).Distinct();

还可以调用Distinct 扩展方法来删除重复项。

【讨论】:

作为 EF 的新手,我从未注意到有 SelectMany!你救了我的一周,我不知道该怎么说谢谢:)

以上是关于在 EntityFramework 中加入两个 M:N 关系的主要内容,如果未能解决你的问题,请参考以下文章

webapi+entityframework工作问题总结

在Java中加入两个数组? [复制]

在 Django 过滤器中加入两个模型

如何在 Nhibernate 中加入两个表

在 Django 中加入两个查询集

在sql server中加入两个视图