首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多个聚合的Linq to Sql查询

具有多个聚合的Linq to Sql查询
EN

Stack Overflow用户
提问于 2009-12-10 20:23:10
回答 3查看 602关注 0票数 3

给定一个简单的模式,例如PurchaseOrders { OrderId,Total,LineItemCount },我想为一些简单的统计数据生成一个简单的查询,如下所示:

代码语言:javascript
复制
select sum(lineitemcount) as totalitems, sum(total) as totalsales
from purchaseorders

然而,在Linq to Sql中,我很难将其整合到一个查询中。

目前我有这样的想法:

代码语言:javascript
复制
decimal totalSales = PurchaseOrders.Sum(po => po.Total)
decimal totalItems = PurchaseOrders.Sum(po => po.LineItemcount)

有没有一种方法可以作为一个查询来完成?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-10 21:47:38

我能找到的最接近的方法就是给它一个假的group-by子句。它可以工作,输出如你所料,但生成的SQL实际上传递了一个参数"1“,并对它进行了分组,这有点不理想。下面是我得到的语法:

代码语言:javascript
复制
PurchaseOrders
    .GroupBy(po => 1)
    .Select(pogroup => new {
           TotalSales = pogroup.Sum(po => po.Total),
           TotalItems = pogroup.Sum(po => po.LineItemCount)
        });
票数 3
EN

Stack Overflow用户

发布于 2009-12-10 20:37:16

这里有一种方法应该是可行的。我不确定数据类型,所以我假设是可以为空的整数。

代码语言:javascript
复制
from t in (
    from t in PurchaseOrders
    select new {
        t.LineItemCount,
        t.Total,
        Dummy = "x"
    }
)
group t by new { t.Dummy } into g
select new {
  TotalItems = (System.Int32?)g.Sum(p => p.LineItemCount),
  TotalSales = (System.Int32?)g.Sum(p => p.Total)
}
票数 1
EN

Stack Overflow用户

发布于 2009-12-10 20:38:12

也许你可以尝试聚合:

代码语言:javascript
复制
var totOrder= PurchaseOrders.Aggregate((preOrder, thisOrder)=>SumTwoOrder(preOrder, thisOrder));
var totalSales = totOrder.Total;
var totalItems=totOrder.LineItemCount;

下面是定义SumTwoOrder方法的方式:

代码语言:javascript
复制
   public PurchaseOrder SumTwoOrder(PurchaseOrder prev, PurchaseOrder thisOrder)
  {
    return new PurchaseORder(prev.Total+thisOrder.Total, prev.LineItemCount+thisOrder.LineItemCount);
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1880634

复制
相关文章

相似问题

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