2013-03-11 89 views
2

我有兩個實體StoreCatalog,使用流暢的Api具有多對多的關係。我想通過id獲得一個商店,並且所有目錄的狀態等於「已發佈」。 下面我嘗試寫下面的查詢,但沒有得到預期的結果。實體框架代碼第一 - 多對多 - 包括條件

var store = context.Stores.Include("Catalogs").Where(s => s.StoreID == id && s.Catalogs.Any(c => c.Status == "Published")).SingleOrDefault(); 

回答

2

你要求的是「給我的商店這個ID,但只有當它有一個已發佈的目錄」(「任何」調用)。

只得到出版目錄將它們投射到一個匿名類型最簡單的方法:

var result = (from s in context.Stores 
      where s.StoreID == id 
      select new 
      { 
       Store = s, 
       Catalogs = s.Catalogs.Where(c => c.Status == "Published") 
      }).SingleOrDefault(); 

...或者,在流暢的界面:

var result = context.Stores.Where(st => st.StoreID == id) 
          .Select(s => new 
          { 
           Store = s, 
           Catalogs = s.Catalogs.Where(c => c.Status == "Published"), 
          }).SingleOrDefault(); 

所以result.Catalogs保存所有已發佈的目錄適用於result.Store

+0

感謝您的線索我設法得到使用強類型模型的結果。我正在爲他人更新你的答案。 – 2013-03-11 13:22:54

+0

@Muhammad我已經手工編輯了包含流暢風格,但仍然使用匿名類型。 – 2013-03-11 19:37:06

+0

如你所願。再次感謝 – 2013-03-11 19:59:53