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

如何在Select2查询/PXProjection中使用BQL IN运算符处理动态值列表

正确实现方案

  1. 调整缓存扩展字段类型
    BQL的In<>运算符不支持原生数组作为参数,你需要把字段类型改为IEnumerable<string>,调整后的缓存扩展代码如下:
public class SOSiteStatusFilterExt : PXCacheExtension<SOSiteStatusFilter>
{
    public static bool IsActive()
    {
        return true;
    }
    public abstract class searchItemsList : PX.Data.IBqlField
    { 
    }
    [PXUnboundDefault()]
    public virtual IEnumerable<string> SearchItemsList { get; set; }
}
  1. 编写PXProjection/Select2的BQL条件
    在你的查询Where子句中直接使用如下写法即可:
    Where<InventoryItem.inventoryCD, In<Current<SOSiteStatusFilterExt.searchItemsList>>>

  2. 运行时动态赋值
    在业务逻辑中组装动态列表后给过滤器字段赋值即可触发动态IN查询,示例代码如下:

var filterExt = Base.Filter.Current.GetExtension<SOSiteStatusFilterExt>();
// 可以传入任意长度的字符串列表
filterExt.SearchItemsList = new List<string> { "123123", "154677", "445899", "998766" };
Base.Filter.Update(Base.Filter.Current);
// 执行查询刷新即可
Base.View.Query.Select();

注意事项

  • 不需要封装PXString对象数组,直接传入字符串的可枚举集合即可,BQL引擎会自动将集合元素转换为SQL IN子句的参数
  • 该写法兼容所有BQL查询场景,包括PXSelect、Select2、PXProjection,不需要单独适配Projection场景
  • 如果你需要筛选的是数值类型字段,只需要把字段的泛型类型改为对应类型的可枚举集合即可,比如筛选INT类型字段可以用IEnumerable<int?>

内容的提问来源于stack exchange,提问作者user1576945

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:36:03