构建通用表达式树,用于过滤子集合属性的多个属性

时间:2017-06-19 10:05:20

标签: c# generics expression-trees

让我们拿这个例子类

public class Order
{
    public Order()
    {
        this.Items = new List<Item>();
    }
    public int OrderId { get; set; }
    public List<Item> Items { get; set; }
}
public class Item{
    public decimal Cost{get;set;}
    public string ItemCode{get;set;}
}

我想写一个泛型表达式树(不应该指定任何硬编码属性名称),我可以在单个项目上面写一个集合的多个过滤器。

示例

var selected = order.Items.Any(i => i.ItemCode == "MM" && i.Cost > 10);

查询必须在同一项目上。通常当我们进行AND操作时,它会再次在项目列表上评估树,我需要查询在同一项目上。

这种类型的表达式树我想说的。这只是一个例子。

Expression propExpression = null;
Type propType = null;

ExpressionType tBinary;

propExpression = Expression.PropertyOrField(param, r.MemberName);
propType = propExpression.Type;           


return Expression.Call(
    typeof(Regex).GetMethod("IsMatch",
        new[] { typeof(string), typeof(string), typeof(RegexOptions) }),
    propExpression,
    Expression.Constant(r.TargetValue, typeof(string)),
    Expression.Constant(RegexOptions.IgnoreCase, typeof(RegexOptions))
);

0 个答案:

没有答案