使用 GROUP BY 对多个字段、SUM 和 COUNT 进行 Linq 查询

Bas*_*mme 2 linq vb.net

我正在尝试使用 LINQ SQL 来查询我的数据库。

假设我有一些如下所示的数据:

var1 var2 var3 qty
1    a    1a   50
1    a    1a   25
2    b    2b   10
2    b    2b   15
2    b    2b   10
3    a    3a   25
Run Code Online (Sandbox Code Playgroud)

我知道如何在 SQL 中格式化我的查询。它会是这样的:

SELECT var1, var2, var3, count(*) AS count, sum(qty) As quantity
    FROM MyTable
    GROUP BY var1, var2, var3
Run Code Online (Sandbox Code Playgroud)

在这种情况下,输出将是这样的:

var1 var2 var3 Count Qty
1    a    1a   2     75
2    b    2b   3     35
3    a    3a   1     25
Run Code Online (Sandbox Code Playgroud)

我如何在 vb.net 中使用 LINQ 做同样的事情

Dim groups = From j In MyTable
             Group By j.var1, j.var2, j.var3 Into g
             Select new {var1 = g.var1, 
                         var2 = g.var2, 
                         var3 = g.var3, 
                         quantity = sum(g.qty),
                         count = count(*)}
Run Code Online (Sandbox Code Playgroud)

这不太正确,但我认为已经很接近了。我不明白 VB.NET 中 group by 的语法。

Tim*_*ter 5

您想要按匿名类型进行分组,这是 VB.NET 中的语法(注意Key):

Dim groups = 
    From j In MyTable
    Group By x = New With {Key .var1 = j.var1, Key .var2 = j.var2, Key .var3 = j.var3} Into g = Group
    Select New With {
        .var1 = x.var1,
        .var2 = x.var2,
        .var3 = x.var3,
        .quantity = g.Sum(Function(r) r.qty),
        .count = g.Count()
    }
Run Code Online (Sandbox Code Playgroud)