datatable分组

leon51 2017-06-21 11:21:55
linq实在上手不了,因此大部分工作还是用SQL做了,但分组却没有办法。
现在需要将类似Table1的datatable按note列分组,得到新的datatable类似Table2的结果。请大神帮忙给个代码,多谢了。
...全文
333 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wang_peng_yl 2017-06-26
  • 打赏
  • 举报
回复
多学几个方法是好事,LInq不是所有版本都有,特别是历史的项目或产品
exception92 2017-06-22
  • 打赏
  • 举报
回复
引用 5 楼 leon51 的回复:
引用
linq to DataSet,类似:
Hi 两位大神,最后再问下,在新的datatable中只需要部分列怎么写,这个select子句不会写。比如我只需要"符号","孔径要求","镀通孔"三列
改成字段查询,类似:
 select new   {
         g.Key,
         xx= g.Select(s => s.Field<string>("xx")),
         xxx = g.Select(s => s.Field<string>("xxx")),
};
leon51 2017-06-22
  • 打赏
  • 举报
回复
非常感谢xdashewan的回复,我只想到了select方法却又不会写 你介绍的第1种方法不可行,因为这些列是有用的,只是不需要显示出来。 第2,3种对我这种还没有入门的小白还说确实比较简单.
xdashewan 2017-06-22
  • 打赏
  • 举报
回复
引用 5 楼 leon51 的回复:
Hi 两位大神,最后再问下,在新的datatable中只需要部分列怎么写,这个select子句不会写。比如我只需要"符号","孔径要求","镀通孔"三列
方法多,1.sql抽的时候就不用抽取出来 2.绑定显示控件的时候隐藏列 3.直接从datatable里把列删除了之后再addrow数据
leon51 2017-06-22
  • 打赏
  • 举报
回复
引用
你把组头看作一行数据不就行了嘛
引用
linq to DataSet,类似:
Hi 两位大神,最后再问下,在新的datatable中只需要部分列怎么写,这个select子句不会写。比如我只需要"符号","孔径要求","镀通孔"三列
  • 打赏
  • 举报
回复
你在原来的 DataTable 中插入两个 DataRow,自己 for 循环一遍每一行就能插入了。每当NOTE列遇到新的值时就插入一个 DataRow。 这个代码应该自己写。
exception92 2017-06-21
  • 打赏
  • 举报
回复
linq to DataSet,类似:

            var result = from p in table.AsEnumerable()
                         group p by p.Field<int>("NOTE") into g
                         select new
                         {
                             g.Key,
                             g
                         };
遍历result 拼接数据就行了。
wang_peng_yl 2017-06-21
  • 打赏
  • 举报
回复
DataTable dt = new DataTable();
            dt.Columns.Add("符号");
            dt.Columns.Add("孔径要求");
            dt.Columns.Add("NOTE");

            for (int j = 0; j < 6; j++)
            {
               DataRow row =dt.NewRow();
               dt.Rows.Add(row);
               row["NOTE"] = "L1-6";
               row["孔径要求"] = "0.25" + j.ToString();
            }

            //分组
           DataTable dt1 = dt.DefaultView.ToTable(true, "NOTE");
           foreach (DataRow row in dt1.Rows)
           {
               string node = row["NOTE"].ToString();
               DataRow[] rows = dt.Select("NOTE like '"+ node +"'");
           }
数据给你分出来了,基本就是这样的思路,你参考一下吧,
xdashewan 2017-06-21
  • 打赏
  • 举报
回复
你把组头看作一行数据不就行了嘛

//#3,复制一个新表
DataTable newTable = dtCustomers.Clone();

foreach(var group in results)
            {
                var row = newTable.NewRow();
                row[0] = linq出来的key
                newTable.Rows.Add(row);

                //将分组结果放入新表
                foreach(var customer in group.Customers)
                {   
                    row = newTable.NewRow();
                    row.ItemArray = customer.ItemArray;
                    newTable.Rows.Add(row);
                }
            }

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧