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

如何将SQL Where规则用于Linq过滤数据,System.Linq.Dynamic.Core不生效如何解决

基于SQL规则过滤Linq查询的可行方案

问题原因

你当前代码无法生效的核心原因有两个:

  • 类型不匹配:promotion_type_code是int类型,你写的规则promotion_type_code = '33'将数值用单引号包裹识别为字符串,Dynamic LINQ严格校验类型,无法完成匹配
  • 需确保已正确引入依赖:要先安装System.Linq.Dynamic.Core的NuGet包,且代码顶部引用using System.Linq.Dynamic.Core;命名空间

修正后的实现方案

方案1:使用System.Linq.Dynamic.Core(推荐)

修正规则的类型写法后即可正常运行,示例代码如下:

using System.Linq.Dynamic.Core; // 必须引入该命名空间

class Program
{
    static void Main(string[] args)
    {
        PromotionVm lObjPromVm = new PromotionVm();
        for (int i = 1; i <= 5; i++)
        {
            PromotionList lObjPromList = new PromotionList();
            lObjPromList.active_indicator = 1;
            lObjPromList.principle_code = "a" + i;
            lObjPromList.promotion_code = "b" + i;
            lObjPromList.promotion_plan_number = 20 + i;
            lObjPromList.promotion_type_code = 30 + i;
            lObjPromList.start_date = DateTime.Now.AddDays(i);
            lObjPromVm.promotion_list.Add(lObjPromList);
        }

        // 单条件规则:int类型不要加单引号
        var sqlRule = "promotion_type_code == 33"; // Dynamic LINQ用==做相等判断,也支持=
        var result = lObjPromVm.promotion_list.Where(sqlRule).ToList();
        // 此时result会正确返回promotion_type_code=33的那条数据

        // 多条件规则写法示例,兼容复杂逻辑
        var complexRule = "promotion_type_code > 32 AND promotion_plan_number IN (23,24,25) AND (active_indicator == 1 OR start_date > @0)";
        var complexResult = lObjPromVm.promotion_list.Where(complexRule, DateTime.Now.AddDays(3)).ToList();
    }
}

// 其余类定义保持不变即可

语法适配注意事项

  • 数值、布尔类型不需要加单引号,字符串类型需要加单引号
  • 支持IN、AND、OR、括号分组等SQL常用语法,相等判断可以用=也可以用==
  • 动态参数可以用@0、@1占位符传入,避免字符串拼接的语法问题

方案2:转DataTable用原生SQL语法过滤

如果需要完全兼容原生SQL的Where规则,可以先把集合转成DataTable,再用Select方法过滤:

// 先把List转DataTable,可自己实现扩展方法或者用第三方工具类完成转换
var dataTable = lObjPromVm.promotion_list.ToDataTable();
// 直接用原生SQL规则过滤,完全支持你原来的SQL写法
var rows = dataTable.Select("promotion_type_code = '33'");
// 再把DataRow转回PromotionList对象即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 03:24:03