【问题标题】:How to use LINQ to get multiple totals如何使用 LINQ 获取多个总计
【发布时间】:2016-07-01 09:00:39
【问题描述】:

假设我在数据库中有以下数据。

class Data
{
    public int Category { get; set; }
    public int ValueA { get; set; }
    public int ValueB { get; set; }
}

我如何编写一个 LINQ 查询来获取 ValueA 的总和以及 ValueB 的总和对于所有带有 Category == 1 的行?

我知道我可以加载所有数据,然后在加载的数据上使用Sum,但我更愿意将它们汇总到数据库中。

我知道我可以使用group by,但我没有按任何分组。我只想要数据中的这两个总数。

【问题讨论】:

标签: c# sql linq group-by


【解决方案1】:

如果你使用的是 EF,你可以试试这个:

var result= context.Data.Where(d=>d.Category == 1)
                        .GroupBy(d=>d.Category)
                        .Select(g=>new {
                                         SumA=g.Sum(d=>d.ValueA),
                                         SumB=g.Sum(d=>d.ValueB)
                                       }
                               );

【讨论】:

    【解决方案2】:

    您可以按常量分组

    var result = from d in context.Data
                 where d.Category == 1
                 group d by 1 into g
                 select 
                 {                  
                     ASum = g.Sum(d => d.ValueA), 
                     BSum = g.Sum(d => d.ValueB) 
                 };
    

    或者正如 octavioccl 指出的那样,您也可以按Category 分组,因为由于where 子句,它将是一个常量值。但是在一般情况下,使用常量是您可以实现所需的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-29
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2011-12-08
      • 2021-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多