プロパティが 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 - I just can't to out how to refactor it for my scenario.