Asp.net 如果第一个条件已通过,如何停止评估

Asp.net 如果第一个条件已通过,如何停止评估,asp.net,reporting-services,reportviewer,rdlc,Asp.net,Reporting Services,Reportviewer,Rdlc,我尝试评估报告中的字段,但每次都失败: = IIf(Fields!lectcrs_hrs.IsMissing, Round(Fields!lectcrs_fee.Value * "1.00", 2), Round(Fields!lectcrs_fee.Value * Fields!lectcrs_hrs.Value, 2)) 在字段的情况下!lectcrs\u hrs.IsMissing=true我的字段为空,我发现第二个案例轮(Fields!lectcrs\u-fe

我尝试评估报告中的字段,但每次都失败:

= IIf(Fields!lectcrs_hrs.IsMissing,
      Round(Fields!lectcrs_fee.Value * "1.00", 2),
      Round(Fields!lectcrs_fee.Value * Fields!lectcrs_hrs.Value, 2))

字段的情况下!lectcrs\u hrs.IsMissing=true
我的字段为空,我发现第二个案例
轮(Fields!lectcrs\u-fee.Value*Fields!lectcrs\u-hrs.Value,2)
包含缺少的字段
字段!选择CRS_hrs
。如果通过第一个案例,为什么要检查第二个案例


如何解决此问题?

您正在寻找的行为称为“短路”,不幸的是,Visual Basic中的IIf函数不提供此功能。原因是IIf()是一个三元函数,因此,传递给它的所有参数都是在函数调用发生之前进行计算的。另一方面,三元运算符(VB 9+中的If())支持条件求值。但是,我不认为If()运算符可以用作SSRS中表达式的一部分


考虑到您试图使用的字段在运行时可能存在,也可能不存在,我建议您在报表中创建一个自定义函数来处理正确的检查和返回值。作为参考,请看一看,它涵盖了相同的场景。

您正在寻找的行为称为“短路”,不幸的是,Visual Basic中的IIf函数不提供这一功能。原因是IIf()是一个三元函数,因此,传递给它的所有参数都是在函数调用发生之前进行计算的。另一方面,三元运算符(VB 9+中的If())支持条件求值。但是,我不认为If()运算符可以用作SSRS中表达式的一部分

考虑到您试图使用的字段在运行时可能存在,也可能不存在,我建议您在报表中创建一个自定义函数来处理正确的检查和返回值。作为参考,请看一看,它涵盖了相同的场景