我无法弄清楚如何构建表达式树来确定属性是否为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 - 我似乎无法为我的场景重构它。