0

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

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。

我发现了这个类似的帖子:在 C# 中,我如何在动态快速代码中添加一个空检查 - 我似乎不知道如何为我的场景重构它。

4

0 回答 0