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()
您可以订购商品并取第一个:
var maxItem = items.OrderByDescending(x => x.Salg * 0.8 + x.Hen * 0.2)
.First();
上面的假设你有一个属性为Salg
和Hen
的类。如果你的项目仍然是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);