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 であることを確認するにはどうすればよいですか。実際には 0 です。

文字列から 10 進数への変換を改善するためのヒントも歓迎します。

4

1 に答える 1

3

私は C# 構文に慣れていますが、「let」を使用して除数の値をキャプチャし、0 より大きい場合にのみ使用し、それ以外の場合は 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 に答える