我正在尝试使用" Not IN"将SQL查询转换为Linq到实体。

时间:2016-03-08 21:19:14

标签: c# sql-server linq-to-entities

我有一个SQL查询(存储过程),我很难尝试在Linq中使用" NOT IN"。

这是SQL查询:

balanced accuracy

以下是我在MVC操作方法

中尝试做的事情
ALTER PROCEDURE [dbo].[spGetAvailableRoles2User]
    @Id nvarchar(128)
AS 
BEGIN
    SET NOCOUNT ON;

    SELECT name 
    FROM Role 
    WHERE name NOT IN (SELECT t3.Name
                       FROM [User] t1 
                       JOIN [UserRole] t2 ON t1.Id = t2.UserId 
                       JOIN [Role] t3 ON t2.RoleId = t3.RoleId
                       WHERE t1.Id = @Id)
END

有人可以解释我做错了吗?

1 个答案:

答案 0 :(得分:1)

假设你已经在Entity Framework中建立了你的关系并且这样设置正确(假设一个角色的名称是唯一的),它应该像下面这样简单:

from role in db.Roles
where !role.Users.Any()
select role.Name

如果您设置了关系,以便您的Role实体具有这样的Users属性,那么它将会更复杂一些。但是,如果您已经有足够好的数据完整性,没有没有相应用户的IdentityUserRole条目,那么根本不需要涉及Users表:

from role in db.Roles
where !db.IdentityUserRoles.Any(iur => iur.Name == role.Name)
select role.Name