Я предполагаю, что в вашем коде не более ОДНОГО тега заголовка. Это может происходить по нескольким причинам:
Вам нужен runtimy класс для содержания этих результатов runtimy. Как насчет xml?
XElement result = new XElement("result",
list.GroupBy(i => i.GroupId)
.Select(g =>
new XElement("Group", new XAttribute("GroupID", g.Key),
g.Select(i => new XAttribute(i.Country, i.Value))
)
)
);
Вы ожидаете несколько записей на ячейку результата? Раз так должно было бы быть некоторое Подведение итогов (и больше группировки) там.
(этот ответ является подтверждением концепции, не конечным результатом. Существует несколько проблем для обращения, такие как: упорядочивание столбцов, недостающих ячеек, и так далее).
После выполнения быстрого поиска Вы могли бы хотеть посмотреть на ModuleBuilder, TypeBuilder и классы FieldBuilder в Системе. Отражение. Испустить. Они позволяют Вам создавать класс динамично во времени выполнения. За пределами этого необходимо было бы сделать группировку на объектах и затем сделать что-то с иерархическими результатами, которые Вы получаете от LINQ. Я не уверен в способе динамично создать анонимные поля типа во времени выполнения, и это походит на то, что должно было бы произойти.
Вы могли попытаться пользоваться динамической linq библиотекой, обеспеченной MS. У них есть много перегрузок к методам расширений, которые берут строки в качестве аргументов. У них также есть синтаксический анализатор выражения, который берет строку испущение лямбда-выражения. Необходимо смочь создать динамический выбор с помощью них.
Слово предупреждения, хотя, Вы заканчиваете с неуниверсальным IQueryable, а не универсальным IQueryable, таким образом, Вы немного ограничены на том, что можно сделать с результатом, и Вы бросаете немного безопасности типов, но это может быть в порядке в Вашем приложении...
Ссылка для динамического материала linq
Существует ссылка, где можно загрузить исходный код динамическая библиотека плюс некоторые хорошие иллюстрации того, как можно использовать его.
var labResults = from lab in CoreLabResults
where lab.Patient == 8
group lab by new { lab.Patient, lab.TestNo, lab.CollectedDate }
into labtests
select new
{
labtests.Key.Patient,
labtests.Key.TestNo,
labtests.Key.CollectedDate,
MCHC = labtests.Where(lab => lab.TestVar == "MCHC").FirstOrDefault().Result,
LYABS = labtests.Where(lab => lab.TestVar == "LYABS").FirstOrDefault().Result,
TotalTests = labtests.Count()
}