linq Group来自DataTable

时间:2013-09-18 09:49:59

标签: c# linq

我有像这样的DataTable

感谢Bob Vale的帮助

什么是(选择(X,i)意味着你的linq, 但是因为我在桌子上犯了一个错误 我有这个

   No |  Size   | Type   |   FB   |   FP
----------------------------------------
 100  |   2     | typeA  |   FB1  |    A1        
 101  |   3     | typeB  |   FB1  |    A1     
 101  |   4     | typec  |   FB1  |    A1         
 103  |   4     | typeC  |   FB2  |    A2         
 103  |   5     | typeD  |   FB2  |    A2         
 103  |   6     | typeE  |   FB2  |    A2

我希望有类似的东西

  No |  Size   | Type   |   FB   |   FP    
    ---------------------------------    
100  |  2     | typeA  |   FB1  |    A1    
101  |  3     | typeB  |   FB1  |    A1     
     |  4     | typec  |        |        
103  |  4     | typeC  |   FB2  |    A2         
     |   5    | typeD  |        |        
     |   6    | typeE  |        |   

我该怎么做?我可以制作Group By

var result = from row in cableDataTable.AsEnumerable()
             group row by new 
             {
                 FB = row.Field<string>("FB"),
                 FP = row.Field<string>("FP"), 
                 Size = row.Field<int>("Size"),
                 Type = row.Field<int>("Type"), 
                 no= row.Field<int>("no"),
             } into g
             select new
             {
                 FB = g.Key.FB,
                 FP = g.Key.FP,
                 Size = g.Key.Size,
                 Type = g.Key.Type 

no = g.Key.no                  };

但它无法给出结果

感谢您的关注

2 个答案:

答案 0 :(得分:3)

这个怎么样:

// First declare a conversion from the DataTable to an anon type
var rows = cableDataTable.AsEnumerable()
                         .Select(x => new { 
                                           Size = x.Field<int>("Size"),
                                           Type= x.Field<string>("Type"),
                                           FB = x.Field<string>("FB"),
                                           FP = x.Field<string>("FP")
                                          });

// Now use group by, ordering and select many to select the rows
var result =  rows.GroupBy (row => new {row.FB, row.FP} )
                  .OrderBy (g => g.Key.FB)
                  .ThenBy(g => g.Key.FP)
                  .SelectMany(g => g.OrderBy(row => row.Size)
                        .Select((x,i) =>
                                               new { 
                                                 Size = x.Size,
                                                 Type = x.Type,
                                                 FB = (i==0) ? x.FB : null,
                                                 FP= (i==0) ? x.FP : null 
                                                }));

答案 1 :(得分:0)

您可以使用linq查询作为    var result = cableDataTable.AsEnumerable()。GroupBy(g =&gt; new {g.FB,g.FP})。选择(x =&gt; x);