C# 如何使用表达式树过滤包含可空类型的IQueryable?

C# 如何使用表达式树过滤包含可空类型的IQueryable?,c#,expression-trees,iqueryable,C#,Expression Trees,Iqueryable,我有一个模型类MyModel,它有一个null属性:Field1。我正在尝试使用表达式树根据Field1筛选MyModel的可查询项。第一部分handle nullable如下所示: var memEx = Expression.Property(parameterEx, "Field1"); var memberEx = Expression.Condition( Expression.Property(memEx , "HasValue"), Expression.Prop

我有一个模型类
MyModel
,它有一个
null
属性:
Field1
。我正在尝试使用表达式树根据
Field1
筛选
MyModel
的可查询项。第一部分handle nullable如下所示:

var memEx = Expression.Property(parameterEx, "Field1");

var memberEx = Expression.Condition(
    Expression.Property(memEx , "HasValue"),
    Expression.Property(memEx, "Value),
    ConvertExpressionType(Expression.Constant(null), typeof(TimeSpan))
)
这里,
ConvertExpressionType()
转换表达式的类型,以便它可以与
条件
表达式一起使用

在调试中,完整的可查询项如下所示:

{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))}

所以,我猜,我在条件表达式中做错了什么。我如何解决这个问题(或者准确地找出导致异常的原因?

甚至不检查,我会说问题是

ConvertExpressionType(Expression.Constant(null), typeof(TimeSpan))
因为第一个
null
常量没有类型(
Expression.constant(null)。type
typeof(object)
),第二个也是更重要的一点,当然不能转换为
TimeSpan
(或任何不可为null的值类型)

不太清楚
Field1
null值的含义是什么。如果您想将其视为零,请用

Expression.Constant(TimeSpan.Zero)
Expression.Constant(TimeSpan.Zero)