Linq to SQL选择distinct和sum

时间:2015-08-04 15:45:37

标签: vb.net linq-to-sql

我有一张表格,其中包含有关产品质量控制的每日统计数据。我需要每周报告哪些产品通过/未通过QC。

我可以使用以下方式获取数据:

Dim productsPassed = (From p In dc.tblProductStats
                      Where p.StatDate >= startDate And p.StatDate <= endDate And p.Status = "PASS"
                      Order By p.Product)

由于这是每日统计数据列表,因此我使用p.Product和p.PCount列获得以下内容

ASD 1 ASD 1 ASD 4 FGG 1 FGG 5 HMD 1 JWC 1 JWC 3 ......等等。

我需要这样: ASD 6 FGG 6 HMD 1 JWC 4 ....

我尝试使用Select p.Product Distinct但无法弄清楚如何总结p.PCount的数量

任何帮助表示感谢。

更新

根据Ric的代码,我试图转换,以便我仍然有一个列表,我后来使用For Each产品在productsPassed并使用StringBuilder构建一个html表。

我现在的代码是

Dim ProductsPassed = (From p In dc.tblProductStats
                              Where (Function(p) p.StatDate >= ReportStartDate AndAlso p.StatDate <= ReportEndDate AndAlso p.PStatus = "PASS")
                              Group By (Function(p) p.Product)
                              Select (Function(p) New With {.Product = p.Key,
                                                            .PCount = p.Sum(Function(item) item.PCount)}))

最初我自己有 GROUP ,VS抱怨它预计 BY 所以我补充说现在它抱怨它希望 INTO 。此外,我不确定项目的来源。

1 个答案:

答案 0 :(得分:1)

试试这个(未经测试并冒险猜测你的结构):

Dim ProductsPassed = dc.tblProductStats.   
    Where(Function(p) p.StatDate >= startDate AndAlso
                   p.StatDate <= endDate AndAlso p.Status = "PASS").
    GroupBy(Function(p) p.Product).
    Select(Function(p) New With {
        .Product = p.Key,
        .Count = p.Sum(Function(item) item.PCount)
    })

使用我编写的一些示例类产生以下输出 enter image description here