EF core 5 多对多过滤器

2023-12-19

这是我的查询

 public async Task<IEnumerable<Menu>> GetMenuByRolesAsync(string[] roles)
        {
    var result= await _context.Menus//.Include(o => o.Parent)
                                     .Include(m => m.Childrens)
                                     .ThenInclude(m => m.Childrens)
                                     .Include(m => m.Roles.Where(r => roles.Contains(r.Name)))   --it is not filtering basd on roles                          
                                     .Where(m => m.ParentId == null)
                                     .ToListAsync();
}

它正在生成以下查询

-- @__roles_0='System.String[]' (DbType = Object)
SELECT m.id, m.icon, m.name, m.parent_id, m.url, t.role_id, t.menu_id, t.id, t.concurrency_stamp, t.name, t.normalized_name
FROM security.menu AS m
LEFT JOIN (
    SELECT r.role_id, r.menu_id, r0.id, r0.concurrency_stamp, r0.name, r0.normalized_name
    FROM security.role_menu AS r
    INNER JOIN security.role AS r0 ON r.role_id = r0.id
    WHERE r0.name = ANY (@__roles_0) OR ((r0.name IS NULL) AND (array_position(@__roles_0, NULL) IS NOT NULL))
) AS t ON m.id = t.menu_id
WHERE (m.parent_id IS NULL)
ORDER BY m.id, t.role_id, t.menu_id, t.id

这是多对多配置 // 多对多

    builder.HasMany(r => r.Menus)
           .WithMany(r => r.Roles)
           .UsingEntity<RoleMenu>(
              j => j
                  .HasOne(rm => rm.Menu)
                  .WithMany(m => m.RoleMenus)
                  .HasForeignKey(rm => rm.MenuId),
              j => j
                  .HasOne(rm => rm.Role)
                  .WithMany(r => r.RoleMenus)
                  .HasForeignKey(rm => rm.RoleId),
              j =>
              {
                  j.ToTable("role_menu", schema: "security");                                                 
                  j.HasKey(rm => new { rm.RoleId, rm.MenuId });
              });

我需要根据角色过滤菜单..但它不是根据角色过滤..我正在获取所有角色..我检查了生成的查询..请让我知道问题是什么..


您将过滤包含与实体过滤混合在一起。

过滤包括

.Include(m => m.Roles.Where(r => roles.Contains(r.Name)))

仅过滤相关集合中的项目(在本例中为菜单角色)。

为了过滤实体集(本例中为菜单),您需要将其替换为通常的Where运算符,对于所需的过滤将是

.Where(m => m.Roles.Any(r => roles.Contains(r.Name)))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EF core 5 多对多过滤器 的相关文章

随机推荐

  • 如何使用 gridview 内的 LinkBut​​ton 删除代码隐藏文件中选定的用户名?

    我的 JobPost mdf 中有一个 UserDetail 表 我有一个 Gridview1 显示 UserDetail 表中的列 该表具有主键 UserName 这个 UserName 最初是使用Membership类函数保存的 现在我
  • 是否有一种独立于平台的方式(Java?)来读取音频 CD 的目录?

    如果可能的话 我想避免使用本机库 当然 对于 Linux Windows 和 Mac OS X 来说 有更好的方法来解决这个问题 抱歉 你运气不好 您将需要 JNI 并且对于不同的平台它会有令人讨厌的不同 基础 Java 库涵盖了几乎通用的
  • Apache POI - 获取整数数字

    Apache POI 单元格值中的数字均以 Double 形式返回 当我做getCell toString 在 Excel 中显示为 123 的数字将转换为 123 0 我如何知道该数字应该显示为整数 我是否需要在 Java 中应用一些魔法
  • 在 folium 地图上绘制数据帧中的纬度经度点 - iPython

    我有一个带有纬度 经度坐标的数据框 latlon 51 249443914705175 0 13878830247011467 51 249443914705175 0 13878830247011467 51 24976823997686
  • 避免在继承的 java 类中进行强制转换

    我有一堂课 class MyClass public MyClass getParent public MyClass getChildren 和一个子类 MySubClass extends MyClass public String g
  • android 动态改变样式

    我已经在 styles xml 中描述了对象的属性 不管对象是什么 我想在 styles xml 中动态更改这些属性 有人知道我该怎么做吗 你可以这样做 活动中 this setTheme R style ThemeRed 在 styles
  • 如何在由knitr制作的HTML5幻灯片中使用“R生成”图作为半透明背景?

    我想在 HTML5 幻灯片的第一页添加一个绘图 我可以以动态的方式实现这一点吗 也就是说 背景图像将由 R 代码生成 而不是插入半透明的 PNG 图像 谢谢 Update 我想要的是 您可以使用块选项dev args为了达成这个 您需要正确
  • 什么是语句的不可达端点(unreachable endpoint)?

    受到这个问题的回答的启发 C 中 switch 的空情况是否与下一个非空情况合并 https stackoverflow com questions 15164318 is empty case of switch in c sharp c
  • 使用 wincertstore 的 Python 请求

    我试图通过 requests 包连接到我公司的内部网页 但由于 python 不使用 Windows 默认的受信任证书 因此连接被拒绝 我发现 wincertstore 可用于获取 Windows 默认证书 但我仍然不确定如何将其与我的请求
  • .NET / WPF 中的通用 JSON 解析器?

    我读过很多关于如何使用 DataContractJsonSerializer 将 JSON 对象反序列化为特定对象的教程 但是 我想将我的对象反序列化为由字符串 数组或字典组成的字典 例如当我说 JsonObject Parse myJSO
  • 在Python中分割字符串

    我有一个像这样的字符串 这是 括号测试 和引号测试 我正在尝试用 Python 编写一些内容 将其按空格分开 同时忽略方括号和引号内的空格 我正在寻找的结果是 this is 括号测试 和引号测试 这是一个适用于您的测试输入的简单解决方案
  • 如何在数据库中存储自定义用户字段

    我正在尝试找到一个教程来指导我基于用户的自定义字段如何工作 就像在调查网站中一样 它们允许用户创建自定义字段并存储它们 更重要的是存储通过这些字段输入的数据 我正在寻找一些描述如何在数据库上完成此操作的内容 我在寻找一种方法时遇到了一些麻烦
  • fwrite 对于大量小写入的效率

    我有一个程序可以使用以下命令保存许多 gt 1GB的大文件fwrite它工作得很好 但不幸的是由于每次调用的数据的性质fwrite只写1 4字节 结果 写入可能需要一个多小时 其中大部分时间似乎是由于系统调用开销 或至少在 fwrite 的
  • TextView 椭圆高度明智

    有没有等价的android ellipsize 对于 y 轴上太长的文本 省略 x 轴上太长的文本 我有一个 TextView 它必须是固定高度 但是它里面的文本通常太长 无法全部容纳 我希望它在被切成两半之前停止 我不想设置android
  • Android SearchRecentSuggestions - 在 SearchView 中输入时不会显示建议

    我有一个可用的搜索小部件 并且想要添加搜索历史记录建议 我按照 Android 教程 http developer android com guide topics search adding recent query suggestion
  • 如何为 VSTS 添加 GIT 子模块以与 Visual Studio 2017 一起使用

    如何在 Azure GIT 中创建子模块存储库和我的另一个项目 C MVC 并在 Azure GIT 中使用它或在 Visual Studio 2017 IDE 中引用它 是否有任何视频显示此内容或解释此内容的文档 我没有看到任何东西 尤其
  • 使用factomineR 进行因子分析

    当我在 R 中使用函数 CA 时遇到问题 我的数据是 data row names Conscient NonConscient MoinsSouvent 185 213 PlusieursfMois 98 56 PlusieursfSem
  • “此 HTML5 文档检查接口已弃用”

    在做一个项目时 我正在检查它是否有 W3C 错误 使用HTML 验证器 https addons mozilla org en us firefox addon html validator Firefox 的插件 在此过程中我发现了一个以
  • Java-多边形和线的交点

    有没有什么函数可以给我一个交点Polygon and Line2D 我有一个多边形和一个我知道相交的线段 我想要交点的实际值而不是布尔答案 给你 有趣的方法是 getIntersections 和 getIntersection 前者解析所
  • EF core 5 多对多过滤器

    这是我的查询 public async Task