如何解决ef core 5.0如何过滤包括
我正在尝试使用“包含时过滤”的新功能,但由于某种原因我没有正确使用它。 https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-5.0/whatsnew#preview-3
我有一个带有类别的产品。我需要按类别标题/名称过滤产品。这是多对多的关系。
类别标题应包含“ Vlees”。但是,即使使用了错误的Category.Title名称,也会以某种方式退回数据库中的 ALL 6个产品。
var products = await _context.Product
.Include(c => c.ProductCategories.Where(c => c.Category.Title.Contains(containsTitle)))
.ThenInclude(c => c.Category)
.ToListAsync();
解决方法
但是以某种方式所有数据库中的6种产品被退回了
那是因为您正在查询_context.Product
。过滤后的Include
用于过滤子集合,而不是主查询。因此,您可以获得所有产品,但所有这些产品应仅包含通过过滤器的类别。
您似乎希望EF仅返回名称中包含“ Vlees”的类别的产品,但这并不是过滤Include
的目的。为此,您必须自己过滤产品:
_context.Product
.Where(p => p.ProductCategories.Any(c => c.Category.Title.Contains(containsTitle)))
这可以与过滤后的Include
结合使用,但不一定要结合使用。如果您不过滤Includes
,则会获得按类别名称过滤的产品,但会在其集合中包含所有类别。
经过过滤的Include
使您可以自由地分别过滤查询结果和子集合。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。