首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >NULLIF (带分式)的表达式方法

NULLIF (带分式)的表达式方法
EN

Stack Overflow用户
提问于 2015-12-20 10:40:59
回答 1查看 225关注 0票数 3

我使用的是C# 4.5.2。我必须调用SumDenominator方法作为Expression.Divide方法的分母:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var SumDenominatorExpression = Expression.Call(
    null,
    SumDenominatorMethod,
    Parameter,
    SumDenominatorSelector
);

然后在后面的实际Expression.Divide中读到:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var FractionExpression = Expression.Divide(
    SumNumeratorExpression,
    SumDenominatorExpression
);

如果分母的选择器生成零,则抛出除以零异常。我试图通过将Sum表达式转换为Nullable<>来解决这个问题,但是Divide方法不吞并空值。而且SQLServer (我的提供程序)没有一个NULLIF函数(即System.Data.Entity.SqlServer.SqlFunctions),可以将调用表达式包装起来。

人们如何用C#表达式树来处理分母中的零?

UPDATE这里是我最后使用的表达式方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 Expression.Condition(
   Expression.Equal(
     SumDenominatorExpression,
     Expression.Constant(0.0, typeof(double))
   ),
   Expression.Constant(0.0, typeof(double)),
   FractionExpression
 )
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-20 11:02:16

听起来你想要EF能够翻译这个表达式。这限制了我们可以使用的模式类型。下列措施应能发挥作用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FractionExpression =
  (SumDenominatorExpression == 0)
     ? (int?)null /*default value - pick what you want*/
     : (SumNumeratorExpression / SumDenominatorExpression);

(我正在以C#的形式编写表达式树,以便输入速度。)

由于EF不支持具有变量的树,因此需要两次使用SumDenominatorExpression表达式。希望Server将对其进行优化,并只对其进行一次评估。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34384449

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文