动态表达式树(Expression Tree)来实现动态筛选

   根据给定的属性名和属性值来筛选procUnits列表中的元素,并将满足条件的元素存储在procUnits列表中。

 var ProcUnitType="IsCost";
 procUnitTypes = procUnits.MapToList<ProcUnitType>();
                var property = typeof(ProcUnitType)
                         .GetProperty(ProcUnitType, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);
                if (property != null && property.PropertyType == typeof(int))
                {
                    var parameter = Expression.Parameter(typeof(ProcUnitType));
                    var condition = Expression.Equal(Expression.Property(parameter, property), Expression.Constant(1));
                    var lambda = Expression.Lambda<Func<ProcUnitType, bool>>(condition, parameter);
                    var filter = lambda.Compile();
                    procUnitTypes = procUnitTypes.Where(filter).ToList();
                }

通过使用Expression.Parameter创建了一个表示Lambda表达式中参数的参数表达式。然后,使用Expression.Property创建了一个表示属性访问的表达式,将参数表达式和属性名传递给它。接下来,使用Expression.Constant创建了一个表示常量值的表达式,将属性值1传递给它。最后,使用Expression.Equal创建了一个表示等式比较的表达式,将属性访问表达式和常量值表达式传递给它。

通过这些表达式的组合,我们构建了一个Lambda表达式,它表示了一个条件,要求属性的值等于1。然后,使用Expression.Lambda将这个Lambda表达式编译为一个委托,可以用于筛选列表。

最后,使用Where方法和编译的委托对procUnitTypes列表进行筛选,将符合条件的元素保留下来。

相关推荐

  1. 动态表达式(Expression Tree)实现动态筛选

    2024-01-16 19:46:01       57 阅读
  2. c#通过ExpressionTree 表达式实现对象关系映射

    2024-01-16 19:46:01       41 阅读
  3. 线段动态开点

    2024-01-16 19:46:01       25 阅读
  4. 动态顺序表实现

    2024-01-16 19:46:01       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-16 19:46:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-16 19:46:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-16 19:46:01       87 阅读
  4. Python语言-面向对象

    2024-01-16 19:46:01       96 阅读

热门阅读

  1. 【MySQL】MySQL 专项练习

    2024-01-16 19:46:01       50 阅读
  2. 【精选】samba服务的下载和使用 (超详细)

    2024-01-16 19:46:01       55 阅读
  3. chrome浏览器并发限制及其突破手段

    2024-01-16 19:46:01       45 阅读
  4. Day27- 贪心算法part01

    2024-01-16 19:46:01       51 阅读
  5. 49-定时器,倒计时,清除定时器,延迟器

    2024-01-16 19:46:01       59 阅读
  6. cesiumlab切片通过arcgisjs加载

    2024-01-16 19:46:01       55 阅读
  7. MySQL虚拟列提高检索效率

    2024-01-16 19:46:01       51 阅读