2011-04-27 78 views
1

在下面的linq查询中,除了零外,我似乎无法编码。我怎样才能确保ValuePerMonth字段为0它发生在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() 

当Group.Sum(功能(DR)CDEC(dr.Field(串)(fldDevider)) )函数返回0,或者如果实际为0,我如何返回Sum 1 fldDevider的1。

有关如何更好地从字符串转换为小数的提示也值得欢迎。

回答

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 2011-04-27 09:12:24