【问题标题】:Linq query with GROUP BY on multiple fields, SUM and COUNT在多个字段 SUM 和 COUNT 上使用 GROUP BY 进行 Linq 查询
【发布时间】:2015-10-27 09:40:59
【问题描述】:

我正在尝试使用 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

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

SELECT var1, var2, var3, count(*) AS count, sum(qty) As quantity
    FROM MyTable
    GROUP BY var1, var2, var3

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

var1 var2 var3 Count Qty
1    a    1a   2     75
2    b    2b   3     35
3    a    3a   1     25

如何在 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(*)}

这不太对,但我认为它很接近。我不明白 VB.NET 中 group by 的语法。

【问题讨论】:

  • 我认为您应该使用g 变量作为选择中的数据源。
  • 是的,它是 g。实际上我得到一个编译错误定义方法'g'在这种情况下是不可访问的。

标签: vb.net linq


【解决方案1】:

您想按匿名类型进行分组,这是 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()
    }

【讨论】:

    【解决方案2】:

    你必须像这样使用anonymous type:-

    Group j By Key = New With { Key .Var1 = j.var1,
                                Key .Var2 = j.var2,
                                Key .Var3 = j.var3 } Into Group
    Select New With { .var1 = Key.Var1,
                      .var2 = Key.Var2,
                      .var3 = Key.Var3,
                      .quantity = Group.Sum(Function(x) x.qty),
                      .count = Group.Count()
                    }
    

    【讨论】:

    • 啊,这就是原因。我必须使用组。组是一个关键字。谢谢。
    • @B413 - 不接受答案的任何具体原因?只是问问,这完全是你的愿望:)
    • 我认为您更新了答案,因为您的代码不再有效。
    • @B413 - 现在不工作了?我在那个特定的日子进行了编辑。是的,它之前有一些问题,但当你检查它时,它很好。无论如何,经过这么多天它发生了,所以我很想问:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 2015-08-08
    • 1970-01-01
    • 2021-12-19
    相关资源
    最近更新 更多