2012-05-23 55 views
0

我有實體:獲取實體 - EF

Entry 
{ 
    public virtual ICollection<Content> Contents { get; set; } 
} 

我需要獲取包含過濾ContentsEntry

var entryWithFilteredContents = dbContext.Entry.Single(). ??? 
    /*Load(entry=>entry.Contents) Where(content=> content.Value > 10)*/ 

現在,當我寫entryWithFilteredContents.Contents我希望只接收有值大於10的內容我知道我能得到一個var entry = db.Context.Entry.Single()然後var contents = entry.Contents.Where(content=> content.Value > 10)但不符合我的需求。

回答

1

EF目前不支持開箱即用。

通常的解決方法是首先選擇的投影,就像這樣:

var query = from e in dbContext.Entry 
      select new { Entry = e, Related = e.Contents.Where(c => c.Value > 10) }; 
return query.Where(p => p.Related.Count > 0).Select(p => p.Entry); 

你當然也可以直接返回任何投影(和潛在的節省一些數據庫往返),但需要一個非匿名類型爲了讓結果逃脫當前的方法。

+0

謝謝你的出色答案。在那一刻,我正在試驗'Join'擴展方法,但目前爲止沒有任何效果。 – MaciejLisCK