8
有一張名爲UserFriends
的表格,用於保存用戶友誼的記錄。 對於各好友中,只有一個記錄,什麼是有效的實體框架查詢來檢查用戶是否是朋友?
User1ID User2ID IsConfirmed
1 2 true
這是在業務邏輯方面等於
User1ID User2ID IsConfirmed
2 1 true
但都不可能發生的一對。
什麼是最有效的(但可讀的,不涉及純SQL)Entity Framework查詢,以確定如果用戶A是用戶B的朋友,考慮到我們不知道其中哪些是在第一或第二列?
我的嘗試是平原和明顯:
public bool AreFriends (int user1Id, int user2Id)
{
return MyObjectContext.UserFriends
.Any (uf => uf.IsConfirmed && (
(uf.UserID == user1Id && uf.FriendUserID == user2Id)
|| (uf.UserID == user2Id && uf.FriendUserID == user1Id)
));
}
難道還有比這裏||
一個更好的辦法?
如果User1ID和User2ID列都是主鍵列,則此查詢會導致索引掃描並且效率很高。你看到這個查詢的執行計劃嗎? – Arian 2011-06-07 09:38:36
@Nima:不,我沒有。那麼,是否將它們都作爲關鍵字使查詢有效?我不是一個真正的數據庫人,喜歡這樣的輸入。您能否請您發表評論作爲答案,以便我可以放棄它,並且如果沒有其他事情出現,請將其標記爲正確? – 2011-06-07 09:44:25
@gaearon - 當它在表上創建主鍵/聚簇索引時,它們不應該是「鍵都是鍵」,它們應該跨越User1ID和UserID2。 – Phill 2011-06-07 11:31:43