2016-08-22 67 views
3

我遇到过这个问题很多次了,我想知道处理Include中Where子句的最佳方法。这里是我的示例代码如何指定包含在实体框架中的位置

IEnumerable<Data.StoreMenu> dataStoreMenus = _context.StoreMenus 
       .Include(sm => sm.MenuCategories.Where(x => !x.IsDeleted)) 
       .Where(sm => sm.StoreId == storeId && !sm.IsDeleted).ToList(); 

该场景是我有一个菜单和菜单有多个菜单类别。菜单和菜单类别都有一个标记来标记删除的项目。现在我只想检索非删除菜单以及非删除菜单类别。

+0

你可以做StoreMenus表,请将isDeleted地方是用假的。加入之间MenuCategories一个连接()方法。我不认为你想要在.include()中实现。 – DevilSuichiro

+0

谢谢...只是想找到替代品,因为你提供了一个使用join() – Jay

回答

0

创建一个子查询:

var result = _context.StoreMenus 
.Where(sm => sm.StoreID == storeId && !sm.IsDeleted) 
.Select(sm=> 
    new { Menu=sm, MenuCats = sm.MenuCategories.Where(smc => !smc.IsDeleted) }) 
.ToList(); 

可能想看看类似的事情:here