Linq ef core 5.0如何包括
我正在尝试使用在Include上过滤的新函数,但不知怎的,我没有正确使用它。 我有一个分类产品。我需要根据类别标题/名称筛选产品。这是一种多对多的关系 类别标题应包含“VLEE”。但是,数据库中的所有产品都会以某种方式被返回,即使它们的类别不正确Linq ef core 5.0如何包括,linq,entity-framework-core,ef-core-5.0,Linq,Entity Framework Core,Ef Core 5.0,我正在尝试使用在Include上过滤的新函数,但不知怎的,我没有正确使用它。 我有一个分类产品。我需要根据类别标题/名称筛选产品。这是一种多对多的关系 类别标题应包含“VLEE”。但是,数据库中的所有产品都会以某种方式被返回,即使它们的类别不正确 var products = await _context.Product .Include(c => c.ProductCategories.Where(c => c.Category.Title.Contains(contain
var products = await _context.Product
.Include(c => c.ProductCategories.Where(c => c.Category.Title.Contains(containsTitle)))
.ThenInclude(c => c.Category)
.ToListAsync();
但是数据库中的所有产品都被返回了
这是因为您正在查询\u context.Product
。筛选的Include
用于筛选子集合,而不是主查询。因此,您可以获得所有产品,但所有这些产品都应该只包含通过筛选的类别
您似乎期望EF只返回名称中包含“VLEE”的类别的产品,但这不是筛选Include
的目的。要实现这一点,您必须过滤产品本身:
_context.Product
.Where(p => p.ProductCategories.Any(c => c.Category.Title.Contains(containsTitle)))
这可以与过滤的包含组合,但不一定。如果不过滤包含的
,则会得到按类别名称过滤的产品,但包含其集合中的所有类别
因此,filteredInclude
使您可以自由地分别筛选查询结果和子集合