【问题标题】:Create Where Clause Dynamically For Byte? Field为字节动态创建 Where 子句?场地
【发布时间】:2019-09-16 17:36:57
【问题描述】:

相关:Create a Lambda Expression With 3 conditions

与上面的主题完全相似,我写了这个Expression

var body = Expression.AndAlso(
Expression.Equal(
    Expression.PropertyOrField(param, "Year"),
    Expression.Constant(year)
    ),
    Expression.AndAlso(
        Expression.Equal(
            Expression.PropertyOrField(param, "CityCode"),
            Expression.Constant(cityCode)
        ),
        Expression.Equal(
            Expression.PropertyOrField(param, "Status"),
            Expression.Constant(50)
        )
    )
);

唯一不同的是在我的新表中Statustinyint nullC# 中的(byte?)。当我运行代码时出现此错误:

二元运算符 Equal 没有为类型 'System.Nullable`1[System.Byte]' 和 'System.Byte' 定义

所以我将Expression.Constant(50) 更改为Expression.Constant((byte?)50) 并再次遇到相同的错误。我的错在哪里?

谢谢


更新 1)

我试过这个:Expression.Constant(50, typeof(byte?)); 但我得到了这个错误:

参数类型不匹配

【问题讨论】:

  • 你试过了吗:Expression.Constant(50, typeof(byte?));
  • 是的,我收到了这个错误:Argument types do not match
  • 哪个调用会引发异常?
  • @PetSerAl,所有这些电话!
  • @Arian 这是不可能的。由于这里没有任何异常处理程序,一旦第一个方法调用抛出异常,其他方法调用将不会完成。因此,只有一个方法调用会引发异常。哪一个?

标签: c# lambda expression-trees c#-7.0


【解决方案1】:

几乎如埃文所说:

Expression.Constant((byte?)50, typeof(byte?))

【讨论】:

    猜你喜欢
    • 2011-01-31
    • 2013-01-13
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多