Уверенный взгляд на вопрос Protected Member Variables . Рекомендуется использовать private по умолчанию (как и C ++ class
ses do) для уменьшения связи. Защищенные переменные-члены чаще всего являются плохой идеей, защищенные функции-члены могут использоваться, например. шаблон шаблона.
Что-то вроде этого?
List<CustData> myList = GetCustData();
var query = myList
.GroupBy(c => c.CustId)
.Select(g => new {
CustId = g.Key,
Jan = g.Where(c => c.OrderDate.Month == 1).Sum(c => c.Qty),
Feb = g.Where(c => c.OrderDate.Month == 2).Sum(c => c.Qty),
March = g.Where(c => c.OrderDate.Month == 3).Sum(c => c.Qty)
});
GroupBy
в Linq не работает то же SQL. В SQL Вы получаете ключ, и агрегируется (форма строки/столбец). В Linq Вы получаете ключ и любые элементы как дети ключа (иерархическая форма). Для поворота необходимо спроектировать иерархию назад в форму строки/столбец выбора.
Сгруппируйте свои данные по месяцу, и затем спроектируйте его в новую таблицу данных со столбцами в течение каждого месяца. Новая таблица была бы Вашей сводной таблицей.