我可以强制表达式与非空参数一起使用吗?

本文关键字:一起 参数 表达式 我可以 | 更新日期: 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);