【问题标题】:Group and combine value DataTable, c#分组和组合值DataTable,c#
【发布时间】:2018-07-23 15:55:00
【问题描述】:

之前:

Name    Class   Ability
Boy1      A1    Sing
Boy2      A1    Sing
Boy3      A2    Sing
Girl1     A2    Sing
Girl2     A2    Dance

之后:

Name                Class   Ability
Boy1,Boy2             A1    Sing
Boy3,Girl1,Girl2      A1    Sing,Dance

如何将表格前后分组? 我用过:DataTable dt = GetDataTable();//获取数据 dt.AsEnumerable()....//不知道怎么继续。 请帮帮我

【问题讨论】:

  • 请在问题的文本中发布您的数据,而不是图片。如果其他人不必转录您的数据,他们会更容易提供帮助。
  • 谢谢你,Jan,第一次给我

标签: c# winforms datatable


【解决方案1】:
var result = dt.AsEnumerable()
     .GroupBy(d => d.Field<string>("Class"))
     .Select(g => new
     {
         Name = string.Join(",", 
            g.Select(gn => gn.Field<string>("Name")).Distinct()),
         Class = g.Key,
         Teacher = string.Join(",", 
            g.Select(gt => gt.Field<string>("Ability")).Distinct())
     });

注意:如果您直接使用 Linq 而不是 DataTable,这会容易得多。

【讨论】:

  • 谢谢 Cetin,这正是我所期望的。
  • 嗨 Cetin,我正面临这个问题,这很复杂。我会尽力解释。这是我想要的结果:docs.google.com/spreadsheets/d/… 我有一个包含大量列的 DataTable。您的解决方案正在使用固定数量的列。
  • @ShaiNguyễn,对不起,我不明白你从那个谷歌电子表格中的意思。如果您的意思是,而不仅仅是类别,您想按类别和类型进行分组,那么您可以通过 .GroupBy( d => new {Category = d.Field("Category"), Type = d.Field ("Type")}).
【解决方案2】:

我为样本创建了一个虚拟数据

        DataTable dtNew, dt = new DataTable();
        dt.Columns.Add("Id", typeof(string));
        dt.Columns.Add("Category",typeof(string));
        dt.Columns.Add("Type",typeof(string));
        dtNew = dt.Clone();


        dt.Rows.Add("323021", "Doors", "900");
        dt.Rows.Add("323022", "Doors", "900");
        dt.Rows.Add("323023", "Doors", "1000");
        dt.Rows.Add("323024", "Doors", "1000");

        dt.Rows.Add("323025", "Walls", "200");
        dt.Rows.Add("323026", "Walls", "200");
        dt.Rows.Add("323027", "Walls", "200");
        dt.Rows.Add("323028", "Walls", "200");

        dt.Rows.Add("323026", "Columns", "300x300");
        dt.Rows.Add("323027", "Columns", "300x300");
        dt.Rows.Add("323028", "Columns", "500x500");

这种情况的解决方案

        //Case 1: Category and Type
        var caretoryTypeResult = (from b in dt.AsEnumerable()
                              group b by new
                              {
                                  Category = b.Field<string>("Category"),
                                  Type = b.Field<string>("Type")
                              }
                                  into grpCategoryType
                                  select new
                                  {
                                      grpCategoryType.Key.Category,
                                      grpCategoryType.Key.Type,
                                      grpCategoryType
                                  }).ToList();

        caretoryTypeResult.ForEach(list => {
            var category = list.grpCategoryType.AsEnumerable().Select(m => m.Field<string>("Id")).ToList();
            dtNew.Rows.Add(string.Join(",", category), list.Category, list.Type);

        });

希望这段代码有所帮助

【讨论】:

    猜你喜欢
    • 2019-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    相关资源
    最近更新 更多