2011-04-27 1 views
1

В следующем запросе linq у меня есть деление на ноль исключение, с которым я не могу показаться кодом. Это происходит, когда сумма fldDevider возвращает 0.Как обрабатывать деление на ноль в Linq

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() 

Как я могу сделать, что в поле ValuePerMonth является 0, когда Group.Sum (функция (д-р) CDec (dr.Field (Of String) (fldDevider))) возвращает 0. Или как мне вернуть 1 для Sum fldDevider, если это фактически 0.

Некоторые советы о том, как лучше преобразовывать строку из строки в десятичную, тоже приветствуются.

ответ

3

Я привык к C# синтаксис, но я бы использовать «пусть», чтобы захватить значение числа разделительную и использовать только его, если он больше нуля, а в противном случае использовать 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() 
+0

Спасибо много, это действительно сложный вопрос, который можно найти в документации и примерах Linq. – CodingBarfield