我有一个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
有人可以解释我做错了吗?
答案 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