Итак, я видел несколько сообщений, описывающих это, но не могу понять это для моего случая. Раньше у меня был SQL-запрос, который использовал команду PIVOT для упорядочения моей таблицы, я пытаюсь перенести эту логику в наше приложение через LINQ. Таблица хранится в DataTable и выглядит так.
ObjectName | ColumnName | Property | Value
----------------------------------------------
foo | bar | a | w
foo | bar | b | x
foo | bar | c | y
foo | bar | d | z
foo | test | a | i
foo | test | b | j
foo | test | c | k
foo | test | d | l
Я хочу преобразовать его в DataTable, который выглядит так.
ObjectName | ColumnName | a | b | c | d
---------------------------------------------------
foo | bar | w | x | y | z
foo | test | i | j | k | l
Итак, я попробовал что-то вроде этого...
var query = dt.AsEnumerable()
.GroupBy(row => row.Field<string>("ColumnName"))
.Select(g => new {
ColumnName = g.Key,
a = g.Where(row => row.Field<string>("Property") == "a").Select(c => c.Field<string>("Value")),
b = g.Where(row => row.Field<string>("Property") == "b").Select(c => c.Field<string>("Value")),
c = g.Where(row => row.Field<string>("Property") == "c").Select(c => c.Field<string>("Value")),
d = g.Where(row => row.Field<string>("Property") == "d").Select(c => c.Field<string>("Value"))
});
Что не включает ObjectName (по какой-то причине выдавало мне ошибку компиляции, чтобы добавить его? ). Глядя на имя столбца отладчика, он отображается правильно, но остальное в основном тарабарщина. Извините, мои навыки LINQ довольно ниже -номинала,Я пытаюсь учиться, но легко запутаться.
Я предполагаю, что мой тип данных не выходит правильно, чтобы иметь возможность использовать этот метод расширения, но я немного не в себе. Какие-либо предложения?
Edit все еще получает некоторые ошибки, я борюсь с этой строкой
DataTable newDT = query.CopyToDataTable();
но я получаю сообщение об ошибке
The type 'AnonymousType#1' cannot be used as type parameter 'T' in the generic type or method 'System.Data.DataTableExtensions.CopyToDataTable (System.Collections.Generic.IEnumerable)'. There is no implicit reference conversion from 'AnonymousType#1' to 'System.Data.DataRow'.