I have model class MyModel with a Nullable property: Field1. I'm trying to filter the queryable of MyModel based on Field1 using an expression tree. The part I handle nullable is as below:
var memEx = Expression.Property(parameterEx, "Field1");
var memberEx = Expression.Condition(
Expression.Property(memEx , "HasValue"),
Expression.Property(memEx, "Value),
ConvertExpressionType(Expression.Constant(null), typeof(TimeSpan))
)
Here, ConvertExpressionType() converts the type of the expression so that it can be used with Condition expression.
In debug, the full queryable looks like below:
{System.Collections.Generic.List`1[MyModel].Where(x => ((IIF(x.Field1.HasValue, x.Field1.Value, Convert(null, TimeSpan)) + x.Field2.ToTimeSpan()) < 06:49:08.3313919))}
Here, Field2 is a second field of type long. I'm trying to make sure the timespan sum of Field1 and Field2 are less than a given value.
However, when I try to enumerate the queryable, after about 2 elements, I get the NullReferenceException. If I just try a dummy value in expression tree instead of null, I can avoid it like:
var memEx = Expression.Property(parameterEx, "Field1");
var memberEx = Expression.Condition(
Expression.Property(memEx , "HasValue"),
Expression.Property(memEx, "Value),
ConvertExpressionType(Expression.Constant(TimeSpan.FromHours(1)), typeof(TimeSpan))
)
So, I guess, I'm doing something wrong in the conditional expression. How can I fix this (or figure out exactly what is causing the exception?