在下面的linq查询中,我有一个除零异常,我似乎无法编码。它发生在fldDevider的Sum返回0时。
Dim lstToReturn As List(Of MonthData)
lstToReturn = (
From myRow In dtSpotData.AsEnumerable()
Group myRow By myRow.Field(Of DateTime)(fldstartdate).Month Into Group
Select New MonthData() With {
.Month = Month,
.ValuePerMonth =
(
Group.Sum(Function(dr) dr.Field(Of [Decimal])(fldSomeGeneralValue)) /
(
Group.Sum(Function(dr) CDec(dr.Field(Of String)(fldDevider)))
)
)
}
).ToList()
当Group.Sum(Function(dr)CDec(dr.Field(Of String)(fldDevider)))函数返回0时,如何确保ValuePerMonth字段为0.或者如何返回1为如果它实际上是0,则求和fldDevider。
有关如何更好地从字符串转换为小数的一些提示也很受欢迎。
答案 0 :(得分:3)
我习惯使用C#语法,但我会使用'let'来捕获除数的值,只有在大于零的情况下才使用它,否则使用1。
Dim lstToReturn As List(Of MonthData)
lstToReturn = (
From myRow In dtSpotData.AsEnumerable()
Group myRow By myRow.Field(Of DateTime)(fldstartdate).Month Into Group
Let div = Group.Sum(Function(dr) CDec(dr.Field(Of String)(fldDevider)))
Select New MonthData() With {
.Month = Month,
.ValuePerMonth =
(
Group.Sum(Function(dr) dr.Field(Of [Decimal])(fldSomeGeneralValue)) / If(div > 0, div, 1)
)
}
).ToList()