2015-05-20 70 views
0

我有一個實體User,屬性List<User>具有多對多關係。這工作。現在,我想獲得User誰不在特定用戶的List<User>,他們有一個特定的名稱包含我的研究。獲得相關實體的條件

所以我這樣做:

List<User> users = db.User 
.Where(user => user.Name.Contains(research) 
.Where(user => user.UserId != UserConnected.UserId) 
.ToList(); 

它的工作,但在這裏,我不排除一個事實,即用戶不能在列表中。 我認爲做這樣的事情:

.Where(user => userConnected.Friends.Any(friend => user.UserId != friend.UserId)) 

許多嘗試後,我沒有找到如何做到這一點。我想知道我是否真的明白這是如何工作的。

+0

有什麼問題?你得到一個錯誤,或者只是沒有得到你想要的數據? – MatteoSp

+0

我沒有這樣做的好方法。因爲我沒有與我的數據庫匹配的結果。我會盡快檢查@Peter的答案。 – Kael

回答

3

對於EF,包含適用於這類問題。這完全取決於EF能夠轉化爲SQL的能力。試試:

var friendIds = userConnected.Friends.Select(f=>f.UserId).ToList(); 
List<User> users = db.User 
    .Where(user => user.Name.Contains(research) 
    .Where(user => user.UserId != UserConnected.UserId) 
    .Where(user => !friendIds.Contains(user.UserId)) 
.ToList(); 
+0

這是工作!謝謝 !你需要啤酒作爲這個幫助的禮物嗎? :p 說真的,你能再解釋一下嗎?因爲,當我讀到:'.Where(user =>!friendIds.Contains(user.UserId))'在初讀時,我覺得這是相反的情況。 – Kael

+0

根據我對您問題的理解,您需要添加一個條件,以確保返回的用戶不在已連接用戶的好友列表中。所以你使用不包含與包含。這可能有助於理解EF表達式如何轉換爲SQL。包含變成了一個IN謂詞,就像這個'(1,65,74)'中的用戶一樣,所以在你的情況下,你希望'user'不在(1,65,74)' – Peter