SQL查询的等效LINQ查询未导致预期结果

时间:2017-07-13 18:40:21

标签: c# sql-server linq

我正在尝试编写一个等同于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() 

我知道更好的方法吗?

1 个答案:

答案 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