0

我想按此 Excel 电子表格中的“更改日期”列对 VB.NET 数据表进行分组:

DataTable 的电子表格表示

因此,最终结果将如下所示:

最终结果

目前,我正在尝试通过以下 LINQ 查询将行组合在一起:

Dim lQuery = From d In dtData Group d By key = "Change Date" Into Group _
               Select changeDate = key, testGroup = Group

最终目标是创建一个具有指定分组的新 DataTable。

更新:我觉得我在以下方面取得了一些进展:

Dim tester = dtData.AsEnumerable().GroupBy(Function(row) New With { _
                                   Key .ChangeDate = row("Change Date")})

dtData = LINQToDataTable(tester)

我从http://forums.asp.net/post/4469664.aspx获得了 LINQToDataTable 函数,因为没有出现 CopyToDataTableMethod。

这将创建以下数据表:

在此处输入图像描述

它显然分组正确,但没有选择其他列。有什么建议吗?

更新:

所以我接受了 D Stanley 的建议,并将我的 LINQ 查询修改为以下内容:

Dim lQuery = From d In dtData.AsEnumerable() _
             Group d By key = "Change Date" _
             Into test = Sum(d(2)), _
             test2 = Sum(d(3))

此代码在 Sum() 函数上产生以下错误:

Sum() 错误

因此,我尝试将行值转换为双精度值,它编译正确,但在尝试将空值转换为双精度值时显然会引发运行时异常:

Dim lQuery = From d In dtData.AsEnumerable() _
             Group d By key = "Change Date" _
             Into test = Sum(CDbl(d(2))), _
             test2 = Sum(CDbl(d(3)))

我应该将什么传递给 Sum 函数,以便它能够正确编译并正确运行?

4

2 回答 2

1

您缺少聚合

Dim lQuery = From d In dtData 
             Group d By key = "Change Date"  
             Into 2008 = Sum(d.2008),
                  2009 = Sum(d.2009),
                  ... etc.

用您用于这些列的任何成员名称替换2008,等。2009

于 2013-06-24T20:59:35.743 回答
0

也许这就是你想要做的?

Dim lQuery = From d In dtData Group d By key = d.changeDate Into Group _
           Select changeDate = key, testGroup = Group
于 2013-06-24T20:12:51.003 回答