と交換Expression<Func<Nullable<TValue>>>
することは可能Expression<Func<TValue>>
ですか?
値はNullable<TValue>.GetValueOrDefault()
です。
と交換
Expression<Func<Nullable<TValue>>>
することは可能Expression<Func<TValue>>
ですか?
確かに-それはラムダの最も外側の結果をラップしているだけです:
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);
}