我想通过此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()函数上产生以下错误:
因此,我尝试将行值转换为正确编译的双精度值,但在尝试将空值转换为double时显然会抛出运行时异常:
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函数,以便它能正确编译并正确运行?
答案 0 :(得分: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
等。
答案 1 :(得分:0)
也许这就是你想要做的事情?
Dim lQuery = From d In dtData Group d By key = d.changeDate Into Group _
Select changeDate = key, testGroup = Group