首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >一个简单的linq查询

一个简单的linq查询
EN

Stack Overflow用户
提问于 2016-04-21 06:34:27
回答 1查看 65关注 0票数 0

情况如下:我有大量的数据存储在“mysamples”中,如下所示。我需要对数据做一些查询和报告工作,而且我是Linq的新手。首先,我需要编写一个Linq脚本来提取所有记录的月度年度报告。它是总结“我的样本”中所有样本的所有样本的“价值”(在本年度,按月份分类)。我可以很容易地在vb.net代码中做到这一点,但是我意识到Linq是解决这类问题的正确工具。有人能先给我点什么吗。谢谢。

代码语言:javascript
运行
复制
Public Structure sample
    Public Property id As String
    Public datapoints As List(Of sampledatapoint)
End Structure

Public Structure sampledatapoint
    Public time As DateTime
    Public value As Decimal
End Structure

Public mysamples As New List(Of sample)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-21 10:08:01

代码语言:javascript
运行
复制
    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使用一个类,因为它既不代表单个值,也不包含值类型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36761436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档