2016-09-14 89 views
0

我有以下類:如何在iCollection屬性中選擇具有特定項目的項目?

public class Foo 
    { 
     [Key] 
     public int ID { get; set; } 

     public virtual ICollection<Cat> Cats { get; set; } 
    } 

我想選擇所有包含特定貓對象的Foo對象。目前,我這樣做:

Cat c = new Cat(10); 
var lPs = Bd.Foos.Include("Cats").Where(p => SomeConditions).ToList(); 
var lFilter = lPs.Where(p => p.Cats.Contains(c)).ToList(); 

,因爲我帶來許多對象從DB只使用LINQ來過濾他們,我不喜歡這種方式。

有沒有更好的方法?

,如果它是有用的,對的DbContext是這樣定義的:

modelBuilder.Entity<Foo>().HasMany(p => p.Cats).WithMany(); 

回答

2

要調用ToList() 2倍。當您在第二行中調用ToList時,它會執行查詢表達式並將結果加載到lps變量。您正在對下一行的內存數據執行過濾器。

您可以避免執行第一個執行查詢表達式的ToList()調用,並將過濾代碼合併到同一行。

var catIdToCheck = 10; 
var result = db.Foos.Where(g=>g.Cats.Any(y=>y.Id==catIdToCheck)).ToList(); 
+0

這是正確的!謝謝 ! – Ayorus

相關問題