Сводная логика LINQ на DataTable

Итак, я видел несколько сообщений, описывающих это, но не могу понять это для моего случая. Раньше у меня был 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'.

5
задан Kevin DiTraglia 31 January 2013 в 20:43
поделиться