首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何编写组合group by和aggregates的LINQ查询?

如何编写组合group by和aggregates的LINQ查询?
EN

Stack Overflow用户
提问于 2011-05-06 07:52:32
回答 2查看 2K关注 0票数 2

给定以下输入,如何编写LINQ查询或表达式来返回数量的聚合结果集?

输入:

代码语言:javascript
复制
var foo = new[] { new { PO = "1", Line = 2, QTY = 0.5000 }, 
                  new { PO = "1", Line = 2, QTY = 0.2500 }, 
                  new { PO = "1", Line = 2, QTY = 0.1000 }, 
                  new { PO = "1", Line = 2, QTY = -0.1000 } 
                }.ToList();

期望的结果:

一些类似的东西

代码语言:javascript
复制
new { PO = "1", Line = 2, QTY = 0.7500 } // .5 + .25 + .1 + -.1

我该如何为多行编写它(参见foo中的对象模型)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-06 07:57:14

这样如何:

代码语言:javascript
复制
var result = foo.GroupBy(x => x.Line)
                .Select(g => new { PO = g.First().PO, 
                                   Line = g.Key, 
                                   QTY = g.Sum(x => x.QTY) });

在只有一行的情况下,只需添加一个.Single() - result是在设置foo时定义的匿名类型的IEnumerable

编辑:

如果PO和Line都应该指定不同的组(PO可以有不同的值),则它们都必须是组密钥的一部分:

代码语言:javascript
复制
var result = foo.GroupBy(x => new { x.PO, x.Line})
                .Select(g => new { 
                    PO = g.Key.PO, 
                    Line = g.Key.Line, 
                    QTY = g.Sum(x => x.QTY) 
                  });
票数 5
EN

Stack Overflow用户

发布于 2011-05-06 08:01:33

代码语言:javascript
复制
var query = (from t in foo
                         group t by new {t.PO, t.Line}
                         into grp
                             select new
                                        {
                                            grp.Key.PO,
                                            grp.Key.Line,
                                            QTY = grp.Sum(t => t.QTY)
                                        }).ToList()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5905373

复制
相关文章

相似问题

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