我試圖查詢一個表,我剛剛放入我們的數據庫以用作MVC 4應用程序的自定義角色提供程序時,出現了一個非常奇怪的問題。Linq to SQL忽略第一個數據庫記錄
我有三個表,用戶,角色和UserRoles。目前用於測試目的我只是在數據庫中的一個角色,與ID = 1
在表的UserRole我有兩個記錄,
- userRoleID 1,用戶ID = 1,角色ID = 1 。
- userRoleID 2,用戶ID = 14,角色ID = 1
現在試圖運行下面的LINQ時(硬編碼用於測試和舉例的目的),它永遠不會返回第一條記錄在數據庫中(userRoleID = 1)
var userRoles = from ur in _db.UserRoles
join r in _db.Roles on ur.roleID equals r.roleID into rj
from subR in rj.DefaultIfEmpty()
join u in _db.Users on ur.userID equals u.userID into uj
from subU in uj.DefaultIfEmpty()
where ur.userID == 1
select ur;
所以在這個例子中代碼返回null。如果我更改where子句以說明ur.userID = 14,那麼它將按預期返回第二條記錄。
如果我然後切換圍繞所述數據庫記錄,使得它們成爲
- userRoleID 1,用戶ID = 14,角色ID = 1。
- userRoleID 2,用戶ID = 1時,角色ID = 1。
它現在只會返回用戶ID爲1的記錄。有沒有人遇到過這個問題,因爲我不知如何繼續。
謝謝。
如果你省略連接,只需在_db.UserRoles中執行'from ur.userID == 1 select ur;'這樣工作嗎?如果您使用連接執行查詢,但沒有'where'子句,請執行所有結果? – Marco 2014-09-22 08:02:04
這就是它變得更奇怪的地方。按預期刪除連接和where子句將返回兩個記錄。但是,對於userID = 1的記錄,我將包含擴展的角色和用戶表,這是我最終想要的。但對於userID = 14,我只能獲取擴展的用戶表,儘管該用戶具有與第一個用戶相同的角色值。 – user1688154 2014-09-22 08:18:45