Подробнее Linq Data Pivoting - PullRequest
       7

Подробнее Linq Data Pivoting

1 голос
/ 25 ноября 2011

Я пытаюсь использовать Linq для поворота таблицы данных. Просматривая ответы здесь и несколько других источников, я думаю, мне удалось пройти большую часть пути, но у меня возникли небольшие проблемы с завершением запроса (полностью из-за моего непонимания Linq, однако я В настоящее время нахожусь в напряженном графике). Таблицы данных следующие:

ИСТОЧНИК:

   Name      |ItemCode|Rank
----------------------------      
   -1        |blah1   |1
   -1        |blah2   |2
   -1        |blah3   |3
   -1        |blah4   |4
*PLACEHOLDER*|blah2   |7
*PLACEHOLDER*|blah1   |22

желаемый выход:

 ItemCode    |companyWide|myGroup
----------------------------      
   blah1     |1          |22
   blah2     |2          |7
   blah3     |3          |
   blah4     |4          |

Код, который у меня сейчас есть:

var temp = reportDataTable.AsEnumerable()
                           .GroupBy(a => a["ItemCode"]).Select(b => new{ItemCode = b.Key, 
                                                                        companyWide = b.Where(a => (string)a["Name"] == "-1").Select(a => a["Rank"]),
                                                                        myGroup = b.Where(a => (string)a["Name"] == "*PLACEHOLDER*").Select(a => a["Rank"]) }) ;

Группировка по ItemCode работает, но я предполагаю, что мой синтаксис неверен при заполнении двух других столбцов. Любая помощь с этим будет принята с благодарностью.

1 Ответ

1 голос
/ 26 ноября 2011

Добавлено FirstOrDefault () для предметов:

var temp = reportDataTable.AsEnumerable().GroupBy(a => a["ItemCode"]).Select(b => 
    new{ItemCode = b.Key, 
        companyWide = b.Where(a => (string)a["Name"] == "-1").Select(a =>a["Rank"]).FirstOrDefault(),
        myGroup = b.Where(a => (string)a["Name"] == "*PLACEHOLDER*").Select(a => a["Rank"]).FirstOrDefault() }) ;
...