Replace nullable parameter in lambda expression with value

Can I replace Expression<Func<Nullable<TValue>>> with Expression<Func<TValue>> ?

Where is the value Nullable<TValue>.GetValueOrDefault() .

+4
source share
1 answer

Can I replace Expression<Func<Nullable<TValue>>> with Expression<Func<TValue>> ?

Of course, it's just wrapping the outermost lambda result:

 static void Main() { Expression<Func<int?>> x = () => 1, y = () => null; Expression<Func<int>> a = DeNullify(x), b = DeNullify(y); Console.WriteLine(x.Compile()()); // 1 Console.WriteLine(y.Compile()()); // {blank; null} Console.WriteLine(a.Compile()()); // 1 Console.WriteLine(b.Compile()()); // 0 } public static Expression<Func<TValue>> DeNullify<TValue>( Expression<Func<TValue?>> expression) where TValue : struct { return Expression.Lambda<Func<TValue>>( Expression.Call(expression.Body, "GetValueOrDefault", null), expression.Parameters); } 
+3
source

Source: https://habr.com/ru/post/1445006/


All Articles