#c# #linq #group-by
#c# #linq #группировать по
Вопрос:
Прошу прощения за ужасный заголовок, я не совсем уверен, как сформулировать мою проблему.
У меня есть объект, который выглядит как:
CustAcct cust = new CustAcct();
cust.Name = "John Doe";
cust.Account = "ABC123";
cust.OrderTotal = 123.43
cust.OrderQty = 4;
cust.TransDate = "12/26/2010 13:00"
Пожалуйста, не тратьте слишком много времени на критику следующей части, потому что это действительно не связано с корзиной покупок / покупателями, но идея та же, я просто хотел использовать что-то, с чем все хорошо знакомы.
У учетной записи может быть более одного клиента, а у клиента может быть более одной учетной записи.
Итак, у вас есть:
List<CustAcct> custList = new List<CustAcct>();
custList.Add("John Doe", "ABC123", 123.43, 4, "12/26/2010 13:00");
custList.Add("John Doe", "ABC123", 32.12, 2, "12/27/2010 10:00");
custList.Add("John Doe", "ABC321", 43.34, 1, "12/28/2010 15:00");
custList.Add("John Doe", "ABC321", 54.60, 3, "12/28/2010 16:00");
custList.Add("Jane Zoe", "ABC123", 46.45, 2, "12/28/2010 17:00");
custList.Add("Jane Zoe", "ABC123", 32.65, 1, "12/29/2010 12:00");
custList.Add("Jane Zoe", "ABC321", 67.65, 3, "12/29/2010 23:00");
custList.Add("Jane Zoe", "ABC321", 75.34, 4, "12/30/2010 08:00");
Что я хотел бы сделать, так это получить сумму всех OrderTotal и OrderQty для каждой учетной записи и клиента, чтобы мой вывод выглядел так:
Account Customer OrderTotal OrderQty
ABC123 John Doe 155.55 6
ABC321 John Doe 97.94 4
ABC123 Jane Zoe 79.10 3
ABC321 Jane Zoe 142.99 7
Я просмотрел свою книгу LINQ to Objects и 101 образец LINQ и не могу понять, как это сделать. Спасибо.
Комментарии:
1. Вы используете синтаксис метода или синтаксис запроса?
2. Я использую синтаксис запроса. из c в CustList…
3. Вы хотите сгруппировать — по комбинации учетная запись / клиент? Или просто группировать по клиенту, а затем по учетной записи? Тонкая разница, но влияет на мой ответ…
4. По комбинации учетная запись / Клиент
Ответ №1:
Вы можете группировать и суммировать следующим образом:
from ca in custList
group ca by new { ca.Name, ca.Account } into g
select new {
g.Key.Account,
g.Key.Name,
OrderTotal = g.Sum(o => o.OrderTotal),
OrderQty = g.Sum(o => o.OrderQty)
};