IEnumerable 中的 LINQ?

发布于 2024-12-20 04:33:16 字数 858 浏览 0 评论 0原文

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

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

I need to get a sum of different columns. Data:

<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>

For example:
I need to know wish "reg" or "avd" has most Result(salg * 0.8 + hen * 0.2)

I am using .net 4 c#

this is a IEnumerable so I can use Select().

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

尹雨沫 2024-12-27 04:33:16

您可以订购这些项目并选择第一个:

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

上面假设您有一个具有属性 SalgHen 的类。如果您的项目仍然是 XML,您将必须使用 Element() 方法来访问这些属性。

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

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

You can order the items and take the first:

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

Above assumes you have a class with the properties Salg and Hen. If your items are still XML you will have to use the Element() method to access these properties.

Alternatively you can use MaxBy() from the MoreLinq project which would be more efficient here:

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

Edit:

In light of the update - you need to group your data by name, sum up each group and order by that sum descending, something like this:

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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文