更多Linq Data Pivoting

时间:2011-11-25 16:56:52

标签: c# linq datatable pivot

我正在尝试使用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的分组有效,但我猜测填充其他2列时我的语法错误。对此的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

为项目添加了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() }) ;
相关问题