Convert List.Contains to Expression Tree

前端 未结 2 700
情歌与酒
情歌与酒 2021-01-27 13:19

Related To:

Create a Lambda Expression With 3 conditions

Convert Contains To Expression Tree

In the following of my previous question I faced with this

2条回答
  •  孤独总比滥情好
    2021-01-27 13:44

    The difference from Convert Contains To Expression Tree is that there we were calling a string instance Contains method, while here we need to call a static generic method Enumerable.Contains:

    public static bool Contains(
        this IEnumerable source,
        TSource value
    )
    

    It can be achieved by using another Expression.Call overload:

    public static MethodCallExpression Call(
        Type type,
        string methodName,
        Type[] typeArguments,
        params Expression[] arguments
    )
    

    like this:

    // Enumerable.Contains(lst, a.Status)
    var containsCall = Expression.Call(
        typeof(Enumerable), // type
        "Contains", // method
        new Type[] { typeof(byte?) }, // generic type arguments (TSource)
        Expression.Constant(lst),  // arguments (source)
        Expression.PropertyOrField(param, "Status")  // arguments (value)
    );
    

提交回复
热议问题