我不知道如何解释这一点,所以我将首先向您展示一些代码并解释它的作用。
Extension Filter
: 接收我为我的应用程序 ( IFilter
) 构建的参数表达式和特殊类型的过滤器。
public static IQueryable<TSource> Filter<TSource, TProperty>(this IQueryable<TSource> source, Expression<Func<TSource, TProperty>> expression, IFilter f)
{
if (!f.IsEmpty())
{
string propertyName = ExpressionHelper.GetExpressionText(expression);
source = source.Where(f.GetWhereLambda<TSource>(propertyName));
}
return source;
}
目前,可以这样做(简化!):
var Foo = db.Foos
.Select(e => new
{
ID = e.ID, // Primary key.
Bar = e.BarID // Some nullable FK.
})
.Filter(e => e.Bar, this.someSpecialFilter);
所以,那边有问题。BarID
可以为空,因此 EF 正在使用 生成 POCO 类int?
,这对我来说很好,但不适用于我的表达式处理。这个问题首先起源于这个问题:How to create a Nullable<T> from a Type variable?.
问题描述:
例外二元运算符 Equal 没有为类型“System.Nullable`1[System.Int32]”和“System.Int32”定义。从此代码中抛出:
return Expression.Equal(leftExpr, rightExpr);
其中 leftExpr 是 a System.Nullable1[[System.Int32
(参数,as int?
),rightExpr 是 a System.Int32
(值,as Int32`)。
问题:
我可以做些什么来避免? 从int?
? 我的意思是,是否可以避免接收可为空的类型,或者我应该在我的代码中检查这一点?
非常感谢,
里卡多