You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 07:39:01