我正在尝试编写一个等同于SQL
的LINQ查询SELECT DISTINCT m.*,rm.RoleId FROM dbo.Menu m
INNER JOIN dbo.RoleMenu rm on m.Id=rm.MenuId
INNER JOIN dbo.RoleUser ru on rm.RoleId=ru.RoleId
WHERE ru.UserName='dd@dd.com' and m.Url='/dashboard#/pm'
我带来了以下查询,但没有返回预期的输出
var auth = _context.RoleUsers.Where(
x => x.Role.MenuRoles.FirstOrDefault().Menu.Url == pagePermissions.Url
&& x.UserName == pagePermissions.UserName).Count()
我知道更好的方法吗?
答案 0 :(得分:3)
您的sql查看与角色用户相关的所有菜单,但您的Linq只查看第一个。我想你想x.Role.MenuRoles.Any(mr => mr.Menu.Url == pagePermissions.Url)
。但是,您还要对匹配的用户执行Count
,而不是选择与该网址匹配的菜单。更接近的翻译是。
var results = (from m in _context.Menus
from rm in m.RoleMenus
from ru in rm.RoleUsers
where m.Url == pagePermissions.Url
&& u.UserName == pagePermissions.UserName
select new { Menu = m, rm.RoleId }).Distinct();
您可能需要调整一些导航属性,因为我只是猜测它们。它们通常是表格的多元化,但我在你的Linq中看到你有MenuRoles
而不是RoleMenus
。