我首先想到的是使用Aggregate
函数填充字典。事情是这样的:
Dim MyTotals =
AllTargetRows
.Aggregate(
new Dictionary<string, int>()
{
{ "January", 0 },
{ "February", 0 },
{ "March", 0 },
{ "April", 0 },
{ "May", 0 },
{ "June", 0 },
{ "July", 0 },
{ "August", 0 },
{ "September", 0 },
{ "October", 0 },
{ "November", 0 },
{ "December", 0 },
{ "Total", 0 }
},
(acc, costRow) =>
{
acc["January"] += costRow.January;
acc["February"] += costRow.February;
acc["March"] += costRow.March;
acc["April"] += costRow.April;
acc["May"] += costRow.May;
acc["June"] += costRow.June;
acc["July"] += costRow.July;
acc["August"] += costRow.August;
acc["September"] += costRow.September;
acc["October"] += costRow.October;
acc["November"] += costRow.November;
acc["December"] += costRow.December;
acc["Total"] += costRow.Total;
return acc;
});
这将导致一个字典,其中键是一年中的月份(和“总”)和值是每个月的值的总和。
对不起,我错过了VB.NET标记。 VB.NET不是我的强项,但我认为这在VB.NET中是等价的。
Dim MyTotals = _
AllTargetRows _
.Aggregate(_
New Dictionary(Of String, Integer) From { _
{"January", 0}, _
{"February", 0}, _
{"March", 0}, _
{"April", 0}, _
{"May", 0}, _
{"June", 0}, _
{"July", 0}, _
{"August", 0}, _
{"September", 0}, _
{"October", 0}, _
{"November", 0}, _
{"December", 0}, _
{"Total", 0} _
}, _
Function(acc, costRow)
acc("January") += costRow.January
acc("February") += costRow.February
acc("March") += costRow.March
acc("April") += costRow.April
acc("May") += costRow.May
acc("June") += costRow.June
acc("July") += costRow.July
acc("August") += costRow.August
acc("September") += costRow.September
acc("October") += costRow.October
acc("November") += costRow.November
acc("December") += costRow.December
acc("Total") += costRow.Total
Return acc
End Function)
我不知道,如果Aggregate
函数的这个重载可以转换为查询语法。一个(可能更简单的)替代方法是完全放弃LINQ,在运行查询之前简单地创建字典,然后循环遍历每行并以这种方式填充字典。就像这样:
Dim MyTotals = _
New Dictionary(Of String, Integer) From { _
{"January", 0}, _
{"February", 0}, _
{"March", 0}, _
{"April", 0}, _
{"May", 0}, _
{"June", 0}, _
{"July", 0}, _
{"August", 0}, _
{"September", 0}, _
{"October", 0}, _
{"November", 0}, _
{"December", 0}, _
{"Total", 0}}
For Each costRow as AllTargetRow in AllTargetRows
MyTotals("January") += costRow.January
MyTotals("February") += costRow.February
MyTotals("March") += costRow.March
MyTotals("April") += costRow.April
MyTotals("May") += costRow.May
MyTotals("June") += costRow.June
MyTotals("July") += costRow.July
MyTotals("August") += costRow.August
MyTotals("September") += costRow.September
MyTotals("October") += costRow.October
MyTotals("November") += costRow.November
MyTotals("December") += costRow.December
MyTotals("Total") += costRow.Total
Next
字典呢? – ilans
@ilanS:我猜想会有一个'Dictionary'。问题是,怎么样? – dotNET
你究竟做了什么?“这使得无法遍历十二个值。” ? – ilans