Сумма, заказ, группа и топ / дубль в Linq - PullRequest
0 голосов
/ 09 февраля 2012

Я очень новичок в LINQ, я искал доски, но ни один из других вопросов не дает полной выборки. Мне нужно запросить с LINQ строго типизированный объект IList<>, и я должен:

  1. Сумма имущества
  2. Группировать по недвижимости
  3. Заказ по той же недвижимости, что и я Сумма на
  4. Ограничить результат до верха 2

Например, если мои данные такие:

 Id  |  Customer  |  CartTotal
-------------------------------
 1   |      a     |     100 
 2   |      a     |     50
 3   |      b     |     110
 4   |      b     |     128
 5   |      c     |     75
 6   |      c     |     30

Мой результат должен быть таким, где я ограничил его топ-2, сгруппировал по клиентам и сделал сумму на CartTotal:

Customer  |  CartTotal
----------------------
    b     |     238 
    a     |     150

Какой лучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 09 февраля 2012
var query = carts.GroupBy(c => c.Customer)
                 .Select(g => new { Customer = g.Key, Total = g.Sum(p => p.CartTotal)})
                 .OrderByDescending(c => c.Total)
                 .Take(2);
1 голос
/ 09 февраля 2012

Все дело в объединении правильных методов расширения. Мы хотим сначала сгруппировать по клиенту - GroupBy - затем для каждого группового проекта для клиента и общей суммы корзины - Select, заказать по убыванию общей суммы корзины - OrderByDescending и, наконец, взять верхние 2 - Take:

var results = customerOrders.GroupBy(c=> c.Customer)
                            .Select(g=> new 
                             { 
                               Customer = g.Key, 
                               CartTotal = g.Sum(x=>x.CartTotal) 
                             })
                            .OrderByDescending(x=> x.CartTotal)
                            .Take(2);
...