我可以强制表达式与非空参数一起使用吗?
本文关键字:一起 参数 表达式 我可以 | 更新日期: 2023-09-27 18:05:34
我不知道如何解释这个,所以我先给你看一些代码,然后解释它的作用。
扩展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使用int?
生成POCO类,这对我来说很好,但不适合我的表达式处理。这个问题首先产生了这个问题:如何创建一个Nullable<</p>
问题描述:
异常二元操作符Equal没有为类型'System. nullable ' 1[System. nullable]定义。Int32]'和'System.Int32'。从下面的代码抛出:
return Expression.Equal(leftExpr, rightExpr);
其中leftExpr是System.Nullable1[[System.Int32
(参数,作为int?
), rightExpr是System.Int32
(值,作为Int32 ')。
问题:
我能做些什么来避免吗? from int?
?我的意思是,是否有可能避免接收可空类型,或者我应该在我的代码中检查这个?
谢谢你,
里卡多。
你想要这个:
我能做些什么来避免'?' from 'int?"?
然后你解释这个
在某些情况下FK是可空的
所以我理解你不能避免可空类型
这可能是概念问题,或者我遗漏了什么
我发现当前的解决方案是使用导航属性,只是抛出一个异常,当某些东西是空的
if ((expression.ReturnType.IsGenericType) && (expression.ReturnType.GetGenericTypeDefinition() == typeof(Nullable<>)))
{
throw new Exception("The property expression cannot be Nullable.");
}
的用法是这样的:
var Foo = db.Foos
.Select(e => new
{
ID = e.ID, // Primary key.
Bar = e.Bar.ID // Use the PK from Bar's navigation property.
})
.Filter(e => e.Bar, this.someSpecialFilter);