Мне нужно создать динамические отчеты, используя LINQ для данных. Содержимое данных datatable неизвестно до тех пор, пока пользователь не задаст данный сложный запрос. Следующий запрос LINQ будет работать, если поля известны:Linq to DataTable (GROUP BY), когда столбцы не известны
var groups = results.AsEnumerable();
var groupList = from g in groups
group g by g.Field<string>(column) into Grup
select new {
GroupedBy = Grup.Key,
CountValue = Grup.Count(r=>r.Field)<int>(countColumn))
};
Однако, так как я не знаю, типа поля, когда столбец целого типа (или отличаются от строки) код потерпит неудачу в:
group g by g.Field<string>(column) into Grup
так как он не может преобразовать int в строку. Ошибка заключается в следующем:
Невозможно привести объект типа «System.Int32» для типа «System.String»
Любые предложения о том, как это исправить? Я пытался определить тип данных колонки с использованием:
results.Columns[column].DataType
, а затем использовать тип данных для литья, но это не работает, по-видимому. Что-то похожее на это:
group g by g.Field<results.Columns[column].DataType>(column) into Grup
Использование Grup вместо Grupi в вашем выборе. – Rahul
Grup/Grupi - это просто опечатка, так как я укоротил код, чтобы опубликовать его здесь. Теперь я его отредактирую. Проблема все еще сохраняется. – user10901
Посмотрите на это http://stackoverflow.com/questions/17678197/linq-grouping-dynamically – Rahul