0

我有兩個表格:User和UserRole。將SQL NOT IN查詢轉換爲LINQ to Entities

我有以下SQL查詢來獲取誰是不是在一定角色的所有用戶:

SELECT * FROM User 
WHERE UserID NOT IN (SELECT UserID FROM UserRole WHERE RoleID = 32) 

假設我有我的EF 5模式中,用戶實體和UserRole的實體,我該怎麼辦寫一個LINQ到實體查詢以獲得與上面的SQL查詢相同的結果?

+1

你的模型中有導航屬性嗎? –

+0

@RaphaëlAlthaus - 是的導航屬性被定義...「UserRolesAssigned」是從User實體到UserRole實體 –

回答

0

你使用類似:

repo.Users.Where(x => x.UserRoles.Where(y => y.RoleID == 32).Count() == 0) 

,或者根據備註:

repo.Users.Where(x => !x.UserRoles.Any(y => y.RoleID == 32))  

repo.Users.Where(x => x.UserRoles.Count(y => y.RoleID == 32) == 0) 

... 
+2

的導航屬性的名稱只是首選項,但您可以將'.Count()== 0'更改爲' !x.Roles.Any(y => y.Id == 32)' – Thewads

+0

@Thewads absolutelly – tschmit007

+0

我測試並確認了所有三個例子都返回了預期的結果。爲了簡潔起見,我選擇使用中間的一個 - repo.Users.Where(x =>!x.UserRoles.Any(y => y.RoleID == 32))。 –