gpt4 book ai didi

linq - ef core 5.0 如何过滤包含

转载 作者:行者123 更新时间:2023-12-04 08:51:45 24 4
gpt4 key购买 nike

我正在尝试使用 Filtered on Include 的新函数,但不知何故无法正确使用。 https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-5.0/whatsnew#preview-3

我得到了一个带有类别的产品。我需要根据类别标题/名称过滤产品。这是多对多关系。

类别标题应包含“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();

enter image description here

最佳答案

But somehow ALL 6 products in the database get returned

那是因为您正在查询 _context.Product。 Filtered Include 用于过滤子集合,而不是主查询。因此,您获得了所有产品,但所有这些产品应该只包含通过过滤器的类别。

您似乎希望 EF 只返回名称中包含“Vlees”的类别的产品,但这不是过滤 Include 的目的。为此,您必须自己过滤产品:

_context.Product
.Where(p => p.ProductCategories.Any(c => c.Category.Title.Contains(containsTitle)))

这可以与过滤后的Include结合使用,但不是必须的。如果您不过滤 Includes,您会得到按类别名称过滤的产品,但包含其集合中的所有类别。

如此过滤的 Include 让您可以自由地分别过滤查询结果和子集合。

关于linq - ef core 5.0 如何过滤包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64065812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com