У меня есть общий список типа Element
, например.
public class Element
{
public string Country { get; set; }
public string City { get; set; }
public int Population { get; set; }
}
Со следующими данными.
var elements = new List<Element>
{
new Element { Country = "Country A", City = "Barrie", Population = 12 },
new Element { Country = "Country A", City = "Barrie2", Population = 12 },
new Element { Country = "Country A", City = "Barrie2", Population = 12 },
new Element { Country = "Country A", City = "Barrie", Population = 12 },
new Element { Country = "Country D", City = "Essex", Population = 12 },
new Element { Country = "Country A", City = "Barrie", Population = 12 },
new Element { Country = "Country A", City = "Barrie", Population = 12 },
new Element { Country = "Country D", City = "Essex", Population = 12 },
new Element { Country = "Country A", City = "Barrie", Population = 12 },
new Element { Country = "Country A", City = "Barrie", Population = 12 }
};
По сути, я хотел бы получить промежуточный итогнаселение сгруппировано по стране и городу.
Что-то вроде.
Country A | Barrie | `running total for Barrie`
Country A | Barrie2 | `running total for Barrie2`
| | `total for Country A`
Country D | Essex | `running total for Essex`
| | `total for Country D`
| | `total for everything`
Я не мог найти расширение (я говорю расширение, потому что я планирую использовать накопительный пакет несколько раз) в любом месте, так что я решил, что я бы попробовал,Итак, я начал с этого простого запроса.
var groupedElements = elements
.GroupBy(x => new { x.Country, x.City })
.Select(x => new { Country = x.Key, City = x.Select(xx => xx.City), Population = x.Sum(xx => xx.Population) })
.ToList();
Этот запрос работает, как и ожидалось, поэтому я думаю, что я на правильном пути.Затем я думаю, что мне нужно выяснить, какое свойство из groupedElements
является агрегатным, потому что это то, над чем мы будем собираться.Как мне это сделать?Или, возможно, у меня может быть параметр, который заставляет меня указывать, в каком столбце я хочу выполнять агрегатную функцию.