如何在Npgsql Text[]的自定义QueryableExtension中将AND替换为OR
适配Npgsql字符串数组的自定义QueryableExtension逻辑转换问题
我需要实现适配Npgsql字符串数组的自定义QueryableExtension,遇到逻辑转换问题求助。
我数据库中存在类型为*Text[]*的字段,存储多个字符串值,我需要对该字段进行检索,但希望使用OR逻辑而非当前的AND逻辑。
目前我编写的查询扩展可以正常检索整个字符串数组,但匹配逻辑是所有传入值都必须命中,代码如下:
public static IQueryable<T> ContainsOfStringArray<T>(this IQueryable<T> source, PropertyInfo property, string[] values) { source = source.Where(_ => values.All(v => EF.Property<string[]>(_, property.Name).Contains(v))); return source; }
我现有测试数据如下:
- record 1 - string[] { AAA, BBB }
- record 2 - string[] { AAA }
当我传入单个查询参数AAA时可以返回2条记录,传入BBB返回1条记录,但是如果同时传入AAA、BBB两个参数,查询结果为0条。
核心问题
如何将匹配逻辑由AND改为OR?是否可以实现?
我尝试过编写自定义Expression.Call但没有成功,我不知道如何正确调用Npgsql的Contains方法完成翻译,因为string[]本身没有Contains方法。如果有编写谓词的Expression.Call的思路麻烦告知,非常感谢。
当前使用的是Asp.Net Core 3.1版本。
问题解决方案
将All()替换为Any()即可实现预期效果,感谢@IvanStoev的评论。
内容的提问来源于stack exchange,提问作者daremachine
相关产品推荐
相关产品推荐

