实体框架对具有列表的实体应用过滤器

时间:2018-09-11 18:10:08

标签: c# entity-framework

我有使用实体框架的代码

 var test = _dbContext.Category
                      .Include(t => t.Items)
                      .Where(t => t.items.show == true)
                      .ToList();

一个类别具有项目列表。但是,我无法应用过滤器show == true

为什么会这样?我该如何解决?

谢谢

2 个答案:

答案 0 :(得分:3)

t=>t.items.show==true中的项目是一个集合,而不是单个项目,因此没有show属性。

如果您只需要加载show == true的项目,则可以单独加载它们:

var categories = _dbContext.Category.ToList();
var items = _dbContext.Category.SelectMany(x => x.Items).Where(x => x.show == true).ToList();

EF将自动将这些项目附加到适当的类别。

答案 1 :(得分:2)

您可以使用Any进行此类请求,如果不使用除过滤之外的其他项目,则可以避免使用“包含”。

var test = _dbContext.Category
                      .Where(t => t.items.Any(item=> item.show == true))
                      .ToList();

P.S:我强烈建议使用C#命名约定。 ItemsShow如果是属性,则更准确。