LINQ в IEnumerable? - PullRequest
       18

LINQ в IEnumerable?

0 голосов
/ 06 декабря 2011

Мне нужно получить сумму разных столбцов.Данные:

<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 4c #

это IEnumerable, поэтому я могу использовать Select ().

1 Ответ

3 голосов
/ 06 декабря 2011

Вы можете заказать предметы и взять первое:

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

Выше предполагается, что у вас есть класс со свойствами Salg и Hen. Если ваши элементы все еще в формате XML, вам придется использовать метод Element() для доступа к этим свойствам.

В качестве альтернативы вы можете использовать MaxBy() из проекта MoreLinq, который будет более эффективным здесь:

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

Edit:

В свете обновления - вам нужно сгруппировать данные по имени, суммировать каждую группу и упорядочить по убыванию этой суммы, примерно так:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...