2012-10-24 18 views
3

我想知道在不首先將所有關係對象加載到內存中的情況下查詢多對多關係的最佳方法。實體框架代碼優先:查詢多對多導航屬性而不加載到內存中

例如,類別和文章有多對多的關係。這意味着我的類別類有一個(延遲加載)導航屬性像這樣:

class Category 
{ 
    public long Id {get; set;} 
    public ICollection<Articles> Articles {get; set;} 
} 

如果我想只選擇可見的文章中,我可以查詢導航屬性,像這樣:

category.Articles.Where(a => a.IsVisible) 

但是據我所知,這將在進行IsVisible檢查之前將所有相關文章加載到內存中。

是否可以查詢相關文章而不將其加載到內存中,即對IQueryable而不是ICollection進行操作?如果這是一對多的關係,那麼我可以直接查詢文章DbSet來實現我所追求的內容,但多對多關係存儲在sql鏈接表中,這意味着我無法使用DbSet來查詢它。我唯一的選擇是手動編寫將查詢鏈接表的原始數據庫嗎?

回答

6

這裏有一種方法:

var visibleArticlesQuery = context.Category.Where(c => c.Id == category.Id) 
              .SelectMany(c => c.Articles) 
              .Where(a => a.IsVisible); 

它也可以查詢文章DbSet,使用Contains,例如。

+0

完美的作品,謝謝! – chrisn

相關問題