如何写一个LINQ查询通过聚集和组合组? [英] How to write a LINQ query combining group by and aggregates?

查看:207
本文介绍了如何写一个LINQ查询通过聚集和组合组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

由于以下输入,我怎么写LINQ查询或前pression返回聚集结果的数量设置?

Given the following input, how do I write a LINQ query or expression to return an aggregated result set for the quantity?

输入:

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();

期望的结果:

Desired result:

沿东西线

new { PO = "1", Line = 2, QTY = 0.7500 } // .5 + .25 + .1 + -.1

如何将我写的多条线路,以及(见FOO对象模型)?

How would I write it for multiple lines as well (see the object model in foo)?

推荐答案

这个怎么样:

var result = foo.GroupBy(x => x.Line)
                .Select(g => new { PO = g.First().PO, 
                                   Line = g.Key, 
                                   QTY = g.Sum(x => x.QTY) });

在这种情况下,你只是有一个线,只需添加一个。单() - 结果的IEnumerable 在设置中定义的匿名类型的

In the case you just have one Line, just add a .Single() - result is an IEnumerable of the anonymous type defined when you set up foo.

编辑:

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

If both PO and Line should designate different groups (PO can have different values), they both have to be part of the group key:

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) 
                  });

这篇关于如何写一个LINQ查询通过聚集和组合组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆