【发布时间】:2015-12-20 18:40:59
【问题描述】:
我正在使用 C# 4.5.2。我必须调用SumDenominator 方法作为Expression.Divide 方法的分母:
var SumDenominatorExpression = Expression.Call(
null,
SumDenominatorMethod,
Parameter,
SumDenominatorSelector
);
然后在实际的Expression.Divide 上读取:
var FractionExpression = Expression.Divide(
SumNumeratorExpression,
SumDenominatorExpression
);
如果分母的选择器生成零,则抛出除以零异常。我试图通过将Sum 表达式转换为Nullable<> 来解决这个问题,但 Divide 方法不会吞下空值。并且 SQLServer(我的提供程序)没有我可以包装 Call 表达式的 NULLIF 函数(即 System.Data.Entity.SqlServer.SqlFunctions)。
人们如何使用 C# 表达式树处理分母中的零?
更新 以下是我最终使用的表达方法:
Expression.Condition(
Expression.Equal(
SumDenominatorExpression,
Expression.Constant(0.0, typeof(double))
),
Expression.Constant(0.0, typeof(double)),
FractionExpression
)
【问题讨论】:
-
我真的不明白你是如何解决 divby0 问题的:默认情况下 C# 会抛出一个 divby0exception,在这种情况下你的目标是什么?
-
Expression.Divide 不允许分母中出现空值,但 SQL Server 允许使用 SQL 出现空值,因此问题是如何从 EF 中使用 NULLIF 函数。
-
啊,好的。我可能以错误的方式翻译它(在荷兰语中,nul 表示零),因此它有点令人困惑。对不起。
-
@CommuSoft,很容易错过。无论如何,谢谢。
标签: c# .net sql-server linq expression-trees