2013-03-11 126 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