使用linq从DataTable分组

时间:2014-10-15 12:38:04

标签: c# linq datatable

大家好我所有的结果如下

    ID      Name     Price
     1      XYZ       10
     2      ABC       10
     1      ABC       20

我想执行分组,以便它应该给我

    ID      Name     Price
     1      XYZ       10
            ABC       20
     2      ABC       10

我尝试使用解决方案形成链接,但我无法得到DataTable linq query to group by a column可以有人帮助我

2 个答案:

答案 0 :(得分:2)

你可以做一些像这个简单的事情

context.Table.GroupBy(t => t.ID);

这将返回此类IQueryable<IGrouping<int, YourClass>>的某些内容(假设您的ID为int)

每个条目都有一个密钥(在这种情况下为ID)和一个枚举器,因此您可以浏览所有分组的记录

答案 1 :(得分:2)

除非您想要更改原始对象,否则您将不得不投影到 new 集合并删除重复的ID值。类似的东西:

var query = 
    data.GroupBy(d => d.ID)
        .OrderBy(g => g.Key)
        .SelectMany(g => (new[] {new {
                                      g.First().ID, 
                                      g.First().Name, 
                                      g.First().Price}})
                         .Concat(g.Skip(1).Select(i => new {
                                                            ID = (string)null, 
                                                            i.Name, 
                                                            i.Price})));

基本上:

  • 按ID分组
  • 获取每组中第一项的所有值
  • 为组中的所有其他项目获取除Id以外的所有值