1

在下面的 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。或者我如何为 Sum fldDevider 返回 1 如果它实际上是 0。

也欢迎一些关于如何更好地将字符串转换为十进制的提示。

4

1 回答 1

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()
于 2011-04-27T09:07:30.960 回答