2012-02-26 53 views
1

我有一個People對象,其中包含FavoritePeople的相關(關聯)表。 FavoritePeople對象只存儲UserId和PersonId,因此我們知道哪些人是用戶最愛。LINQ查詢返回true,如果每個人存在關聯(相關)記錄

我在Code First中使用Entity Framework 4.2,並且映射了除了IsFavorite之外的所有字段,布爾值和我的想法是在FavoritePeople中存在相關記錄時將其設置爲true。

我想在IsFavorite列中返回所有具有正確值的人員記錄。

雖然我可以研究如何在SQL中做到這一點,但我一直堅持如何在LINQ中做到這一點!

有什麼建議嗎?

+0

問題不很清楚 - 什麼是「相關記錄」? – BrokenGlass 2012-02-26 22:06:40

+0

基本上,通過關聯我的意思是如果一個記錄存在於FavoritePeople表中的Person,那麼在該人的People表中將IsFavorite字段設置爲true。 – Mitch 2012-02-26 22:29:29

回答

1

,如果你有一個FavoritePeople財產,你可能能夠..

public bool IsFavorite {get{return FavoritePeople.Any();}} 
+0

謝謝Tyron,這是在單個記錄的基礎上處理它的一個很好的答案,但我需要爲整個集合執行此操作。 – Mitch 2012-02-26 22:25:48

+0

@Mitch - 如果您有人員集合,那麼我只需遍歷集合並獲取每個集合的「IsFavorite」值。然後你可以隨心所欲地做。您將無法使用單個屬性來處理整個集合。 – JasCav 2012-02-26 22:29:40

+0

@JasCav - 感謝您的評論。也許我對此的整個方法是錯誤的。我只想在人員列表中顯示一個複選框,以顯示每個人是否在當前用戶收藏夾列表中。我會認爲這是一個相當普遍的情況,有一些很好的做法(使用LINQ)。 – Mitch 2012-02-26 22:38:42

0

我沒有足夠的代表處發表評論,所以我會用一個答案回答;

如果您選擇多個人,使用泰龍的解決方案將帶給您可怕的表現。

爲人們查詢時,您應該要麼熱切地加載與.Include(x => x.FavoritePeople)的FavoritePeople參考(警告:從數據庫中龐大數據集的機會)
OR(最好)重寫查詢到包括IsFavorite:

ctx.Peoples.Select(x => new 
{ 
    x.Name, 
    IsFavorite = x.FavoritePeople.Any() 
});