LINQ in a IEnumerable?

本文关键字:IEnumerable in LINQ | 更新日期: 2023-09-27 18:16:51

我需要得到不同列的总和。数据:

<name>Nina</name>
<avd>Soft</avd>
<reg>Mara</reg>
<salg>11</salg>
<oms>13000000</oms>
<hen>10</hen>
<name>Vera</name>
<avd>Soft</avd>
<reg>Mara</reg>
<salg>1</salg>
<oms>1520000</oms>
<hen>0</hen>
<name>Hans</name>
<avd>Hard</avd>
<reg>Mes</reg>
<salg>2</salg>
<oms>6130000</oms>
<hen>0</hen>
<name>Egzona</name>
<avd>Hard</avd>
<reg>Mes</reg>
<salg>6</salg>
<oms>10505000</oms>
<hen>35</hen>
例如

:我需要知道希望"reg"或"avd"有最多的结果(salg * 0.8 + hen * 0.2)

我正在使用。net 4 c#

这是一个IEnumerable,所以我可以使用Select()

LINQ in a IEnumerable?

您可以订购商品并取第一个:

var maxItem = items.OrderByDescending(x => x.Salg * 0.8 + x.Hen * 0.2)
                   .First();
上面的

假设你有一个属性为SalgHen的类。如果你的项目仍然是XML,你将不得不使用Element()方法来访问这些属性。

或者,您可以使用MoreLinq项目中的MaxBy(),这在这里会更有效:

var maxItem = items.MaxBy(x => x.Salg * 0.8 + x.Hen * 0.2); 
编辑:

根据更新-您需要按名称分组数据,对每组求和并按求和降序排序,如下所示:

var bestSalePersons = items.GroupBy(x => x.Name)
                           .Select(g => new { Name = g.Key, Sum = g.Sum(i => i.Salg * 0.8 + i.Hen * 0.2) })
                           .OrderByDescending(x => x.Sum)
                           .Take(5);