Lambda表达式实现OR动态查询

最近在做数据迁移的时候有遇到做导航对应时,需要动态拼接OR查询条件的情况,因为平常也比较少用到Lambda表达式查询数据,花费了不少的时间,现将解决方案记录如下:

if (!strCls.IsNullOrEmptyOrWhiteSpace())
  {
          var cls = strCls.Split(',');
          //机关函数应用True时:单个AND有效,多个AND有效;单个OR无效,多个OR无效;混应时写在AND后的OR有效

         //机关函数应用False时:单个AND无效,多个AND无效;单个OR有效,多个OR有效;混应时写在OR后面的AND有效 
           Expression<Func<T_PA_ACHIEVE_MAJOR_NAVI, bool>> filterExp = a => false;//一开始在这里采坑了,需要注意一下
           for (int i = 0; i < cls.Length; i++)
           {
                //因为Linq 的查询实际上是在.ToList()的时候才正式查询,因而先用参数接收数据值,后面的查询才不会报数组下标越界
                string clsdata = cls[i];
                filterExp = filterExp.Or<T_PA_ACHIEVE_MAJOR_NAVI>(a => a.CODE == clsdata);
            }
            var temp = lstDH.ToList().Where(filterExp.Compile()).ToList();
            if (temp != null)
            {
                foreach (var data in temp)
                 {
                     result = result + data.CODE + ";";
                 }
             }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值