1
データベースDDLを実行時に動的Linqに変換してフィルタを定義するこのコードがあります。一部のフィルタがnullになる子プロパティを参照する点を除いて、コードは機能します。ルールが適用されると、nullによって文全体が爆発します。ダイナミックLinqがヌルプロパティを許容しない
例として:
// filter is to see if ParentObject.ChildObject.ChildProperty > 1
var param = Expression.Parameter(typeof(ParentObject));
var nullExpression = Expression.NotEqual(Expression.PropertyOrField(param, "ChildObject"), Expression.Constant(null));
var propertyExpression = Expression.Constant(ChildProperty);
var filterExpression = Expression.MakeBinary(ExpressionType.GreaterThan, propertyExpression, typeof(ChildObject));
var finalExpression = Expression.Add({nullExpression, propertyExpression});
var compiledExpression = Expression.Lambda<Func<T, bool>>(finalExpression, param).Compile() //Compilation will succeed
var isTrue = compiledExpression(ParentObject); //If ChildObject is null, this will explode
私は、実行時にオブジェクトと(filterExpressionとして定義)フィルタを受けるので、NULLプロパティが見つかった場合、私は「エスケープ」LINQの配列にいくつかの方法が必要です。残念ながら、nullExpressionの結果に関係なく、filterExpressionが爆発するので、Nullチェックを追加することは役に立たないようです。私は動的なLinqを間違って書いたのか、これについて別の方法があるのかどうかはわかりません。何か案は?
例外:
System.NullReferenceException: Object reference not set to an instance of an object.
at lambda_method(Closure , ParentObject)
を内蔵しているとしてあなたはコメントを見て、一例としてこれを使用することができるはずですか? –
例外が追加されました。これはSystem.NullReferenceExceptionです。 – ChargerIIC
@ChargerIIC、これは予想されます。 'ParentObject.ChildObject!= null && ParentObject.ChildObject.ChildProperty> 1 ' – Nkosi