我有兩個表格: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查詢相同的結果?
我有兩個表格: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查詢相同的結果?
你使用類似:
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)
或
...
的導航屬性的名稱只是首選項,但您可以將'.Count()== 0'更改爲' !x.Roles.Any(y => y.Id == 32)' – Thewads
@Thewads absolutelly – tschmit007
我測試並確認了所有三個例子都返回了預期的結果。爲了簡潔起見,我選擇使用中間的一個 - repo.Users.Where(x =>!x.UserRoles.Any(y => y.RoleID == 32))。 –
你的模型中有導航屬性嗎? –
@RaphaëlAlthaus - 是的導航屬性被定義...「UserRolesAssigned」是從User實體到UserRole實體 –