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)