构建表达式以检查null

时间:2013-04-10 11:02:18

标签: c# lambda expression

我无法弄清楚如何构建表达式树来确定属性是否为null。我有这样的事情:

public static Expression<Func<S, bool>> CreateFunc(QueryPiece<S> queryPc)
{
    //arg
    ParameterExpression argParam = Expression.Parameter(typeof(S));

    //property
    MemberExpression memberExpr = Expression.Property(argParam, "SomeProperty");

    //property type for constant conversion
    Type propType = memberExpr.Member is MethodInfo
        ? ((MethodInfo)memberExpr.Member).ReturnType
        : ((PropertyInfo)memberExpr.Member).PropertyType;

    //tried this ... unsuccessfully
    Expression func = Expression.Equal(memberExpr, Expression.Constant(null, propType));

    return Expression.Lambda<Func<S, bool>>(func, argParam);
}

我的希望 - 无论多么虚荣;-) - 我可以就像成员财产等同于null一样。

我已经看过一些提到如何使用Expression.Coalesce实现这一点,但我似乎无法让它工作。对于记录,当我尝试使用返回的Lambda时抛出的运行时错误是一般的ArgumentNullException。

我发现了类似的帖子:In C#, how can i add a null check into dynamic express code - 我似乎无法为我的场景重构它。

0 个答案:

没有答案