ef core 5.0 如何过滤包含
ef core 5.0 How to Filtered Include
我正在尝试使用 Filtered on Include 的新函数,但不知何故无法正确使用。
https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-5.0/whatsnew#preview-3
我得到了一个有分类的产品。我需要过滤类别 title/name 上的产品。这是多对多的关系。
类别标题应包含“Vlees”。但是不知何故 ALL 数据库中的 6 个产品被返回,即使 Category.Title 名称错误。
var products = await _context.Product
.Include(c => c.ProductCategories.Where(c => c.Category.Title.Contains(containsTitle)))
.ThenInclude(c => c.Category)
.ToListAsync();
But somehow ALL 6 products in the database get returned
那是因为您正在查询 _context.Product
。 Filtered Include
用于过滤子集合,而不是主查询。因此您获得了所有产品,但所有这些产品应该只包含通过过滤器的类别。
您似乎希望 EF 只有 returns 产品的类别名称中包含“Vlees”,但这不是筛选的目的 Include
。为此,您必须自己过滤产品:
_context.Product
.Where(p => p.ProductCategories.Any(c => c.Category.Title.Contains(containsTitle)))
这可以与过滤后的 Include
结合使用,但不一定。如果您不过滤 Includes
,您会得到按类别名称过滤的产品,但包含其集合中的所有类别。
如此过滤 Include
让您可以自由地分别过滤查询结果和子集合。
我正在尝试使用 Filtered on Include 的新函数,但不知何故无法正确使用。 https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-5.0/whatsnew#preview-3
我得到了一个有分类的产品。我需要过滤类别 title/name 上的产品。这是多对多的关系。
类别标题应包含“Vlees”。但是不知何故 ALL 数据库中的 6 个产品被返回,即使 Category.Title 名称错误。
var products = await _context.Product
.Include(c => c.ProductCategories.Where(c => c.Category.Title.Contains(containsTitle)))
.ThenInclude(c => c.Category)
.ToListAsync();
But somehow ALL 6 products in the database get returned
那是因为您正在查询 _context.Product
。 Filtered Include
用于过滤子集合,而不是主查询。因此您获得了所有产品,但所有这些产品应该只包含通过过滤器的类别。
您似乎希望 EF 只有 returns 产品的类别名称中包含“Vlees”,但这不是筛选的目的 Include
。为此,您必须自己过滤产品:
_context.Product
.Where(p => p.ProductCategories.Any(c => c.Category.Title.Contains(containsTitle)))
这可以与过滤后的 Include
结合使用,但不一定。如果您不过滤 Includes
,您会得到按类别名称过滤的产品,但包含其集合中的所有类别。
如此过滤 Include
让您可以自由地分别过滤查询结果和子集合。