Dim sampleQ1 as New sample() With {.id ="2016Q1", .datapoints = New List(Of sampledatapoint)()}
sampleQ1.datapoints.Add(New sampledatapoint() With {.time = New DateTime(2016, 1, 1), .value = 1000})
sampleQ1.datapoints.Add(New sampledatapoint() With {.time = New DateTime(2016, 1, 10), .value = 2000})
sampleQ1.datapoints.Add(New sampledatapoint() With {.time = New DateTime(2016, 2, 1), .value = 500})
sampleQ1.datapoints.Add(New sampledatapoint() With {.time = New DateTime(2016, 3, 7), .value = 750})
Dim sampleQ2 as New sample() With {.id ="2016Q2", .datapoints = New List(Of sampledatapoint)()}
sampleQ2.datapoints.Add(New sampledatapoint() With {.time = New DateTime(2016, 4, 4), .value = 800})
sampleQ2.datapoints.Add(New sampledatapoint() With {.time = New DateTime(2016, 4, 5), .value = 150})
Dim sampleQ4 as New sample() With {.id ="2015Q4", .datapoints = New List(Of sampledatapoint)()}
sampleQ4.datapoints.Add(New sampledatapoint() With {.time = New DateTime(2015, 10, 20), .value = 666})
Dim mysamples As New List(Of sample)
mysamples.Add((sampleQ1))
mysamples.Add((sampleQ2))
mysamples.Add((sampleQ4))
Dim q = From sdp In mysamples.SelectMany(Function(x) x.datapoints).Where(Function(x) x.time.Year = DateTime.Now.Year)
Group By grp = sdp.time.Month Into Group
Select New With {.Month = grp, .Sum = Group.Sum(Function(x) x.value)}
For Each monthlySum In q
Console.WriteLine("Month: {0}, Sum: {1}", monthlySum.Month, monthlySum.Sum)
Next
'Month: 1, Sum: 3000
'Month: 2, Sum: 500
'Month: 3, Sum: 750
'Month: 4, Sum: 950
SelectMany
的伎俩。它将所有样本的所有抽样点平展成一个列表。 Group By
保持不变。
此外:是否有任何理由为什么您使用struct
而不是class
?我建议至少为sample
使用一个类,因为它既不代表单个值也不包含值类型。
给出一些输入数据和预期结果 –