我很难弄清楚如何构建表达式树来确定属性是否为空。我有这样的事情:
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# 中,我如何在动态快速代码中添加一个空检查 - 我似乎不知道如何为我的场景重构它。