我正在尝试使用子查询进行连接,但似乎无法获得它。这是在sql中工作的样子。我怎样才能在linq工作?
SELECT po.*, p.PermissionID
FROM PermissibleObjects po
INNER JOIN PermissibleObjects_Permissions po_p ON (po.PermissibleObjectID = po_p.PermissibleObjectID)
INNER JOIN Permissions p ON (po_p.PermissionID = p.PermissionID)
LEFT OUTER JOIN
(
SELECT u_po.PermissionID, u_po.PermissibleObjectID
FROM Users_PermissibleObjects u_po
WHERE u_po.UserID = '2F160457-7355-4B59-861F-9871A45FD166'
) used ON (p.PermissionID = used.PermissionID AND po.PermissibleObjectID = used.PermissibleObjectID)
WHERE used.PermissionID is null
答案 0 :(得分:1)
如果没有看到您的数据库和数据模型,就不可能提供任何真正的帮助。但是,最好的方法可能是:
所以,基本上,将你的问题分成更小的部分。 Linqpad很棒,因为它可以让你测试这些东西,并在你去的时候检查你的结果
希望这会有所帮助,祝你好运
托比
答案 1 :(得分:0)
查询的LINQ翻译非常简单:
from pop in PermissibleObjectPermissions
where !pop.UserPermissibleObjects.Any (
upo => upo.UserID == new Guid ("2F160457-7355-4B59-861F-9871A45FD166"))
select new { pop.PermissibleObject, pop.PermissionID }
单词:“从所有对象权限中,检索具有至少一个用户权限的用户权限,其用户ID为2F160457-7355-4B59-861F-9871A45FD16”。
您会注意到此查询使用关联属性来导航关系 - 这样就无需“加入”并简化查询。因此,LINQ查询与原始SQL查询的英文描述更接近。
编写LINQ查询时的诀窍是摆脱将SQL音译成LINQ的习惯。