0

我有这个模型

在此处输入图像描述

我的目标是检索用户的所有资源,但与该用户共享受限角色的资源除外。

这在直接 SQL 中并不太难(6BA60C09-2873-46A5-BAFB-5996A6C6482B 是用户 ID)

SELECT distinct r.Name
FROM  dbo.Resources xr 
INNER JOIN [dbo].[x_Resource_RestrictedRole] rr ON  xr.Id = rr.ResourceId
INNER JOIN [dbo].[aspnet_UsersInRoles] ur ON ur.RoleId = rr.RoleId  
    AND ur.UserId = '6BA60C09-2873-46A5-BAFB-5996A6C6482B'
RIGHT JOIN dbo.Resources r on r.id = xr.id 
WHERE xr.id IS NULL

我无法为此找出一个好的策略,EF因为我无权访问关联表。

这可以在 LINQ 或 lambda 表达式中完成吗?

4

1 回答 1

0

你有一些问题,但我会试着回答你的query

var y = (from xr in context.Resources
         join rr in context.x_Resource_RestrictedRole on xr.Id equals rr.ResourceId
         join ur in context.aspnet_UsersInRoles on rr.RoleId  equals ur.RoleId
         join r in context.Resources on xr.id equals r.id into rJoin
         from r2 in rJoin.DefaultIfEmpty()
         where xr.id == null && ur.UserId = "6BA60C09-2873-46A5-BAFB-5996A6C6482B"
         select new { r.Name }).Distinct(c => c.Name).ToList();
于 2013-02-14T05:05:24.330 回答