根据给定的属性名和属性值来筛选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
列表进行筛选,将符合条件的元素保留下来。