请教个问题啊,我有个DataTable  内容大概为: 
id  name work
1    张三   test1
2   张三    test1
3   李四    test2
4   王五    test3
然后我想 将这个dt 转成一个新的DataTable  
id  name   work  worknum
1   张三    test1   2
2   李四    test2   1
3   王五    test3    1  
请问这个该怎么写

解决方案 »

  1.   

    https://www.cnblogs.com/sydeveloper/archive/2013/03/29/2988669.html
      

  2.   


                DataTable dt = new DataTable();
                dt.Columns.AddRange(new DataColumn[] { new DataColumn("ID", typeof(int)),
                                            new DataColumn("Name", typeof(string)),
                                            new DataColumn("Work", typeof(string)) });
                dt.Rows.Add(new object[] { 1, "张三", "test1" });
                dt.Rows.Add(new object[] { 2, "张三", "test1" });
                dt.Rows.Add(new object[] { 3, "李四", "test2" });
                dt.Rows.Add(new object[] { 4, "王五", "test3" });            DataTable dtResult = dt.Clone();
                dtResult.Columns.Add(new DataColumn("worknum", typeof(int)));
                dtResult.Columns[0].AutoIncrement = true;
                dtResult.Columns[0].AutoIncrementSeed = 1;
                dtResult.Columns[0].AutoIncrementStep = 1;
                int i = 1;
                var query = from t in dt.AsEnumerable()
                            group t by new { t1 = t.Field<string>("Name"), t2 = t.Field<string>("Work") } into m
                            select new
                            {
                                ID = i++,
                                Name = m.Key.t1,
                                Work = m.Key.t2,
                                worknum = m.Count()                        };            query.ToList().ForEach(q => dtResult.Rows.Add(q.ID, q.Name, q.Work, q.worknum));
                string res = "";            foreach (DataRow item in dtResult.Rows)
                {
                    res += item[0].ToString() + " ";
                    res += item[1].ToString() + " ";
                    res += item[2].ToString() + " ";
                    res += item[3].ToString() + " " + "\r\n";            }
                label1.Text = res;
      

  3.   

    static void Main(string[] args)
            {
                //测试数据
                DataTable dt = new DataTable();
                dt.Columns.Add("id", typeof(System.Int32));
                dt.Columns.Add("name", typeof(System.String));
                dt.Columns.Add("work", typeof(System.String));            DataRow dr1 = dt.NewRow();
                dr1[0] = 1; dr1[1] = "张三"; dr1[2] = "test1";
                DataRow dr2 = dt.NewRow();
                dr2[0] = 2; dr2[1] = "张三"; dr2[2] = "test1";
                DataRow dr3 = dt.NewRow();
                dr3[0] = 3; dr3[1] = "李四"; dr3[2] = "test2";
                DataRow dr4 = dt.NewRow();
                dr4[0] = 4; dr4[1] = "王五"; dr4[2] = "test3";            dt.Rows.Add(dr1);
                dt.Rows.Add(dr2);
                dt.Rows.Add(dr3);
                dt.Rows.Add(dr4);
                //分组
                DataTable dt1 = dt.Clone();
                dt1.Columns.Add("worknum");
                var o = dt.AsEnumerable().GroupBy(x => new{name = x["name"],work = x["work"]})
                    .Select(x => new
                    {
                        id=x.First()["id"],
                        name = x.Key.name,
                        work=x.Key.work,
                        worknum=x.Count(),
                    }).ToList() ;            o.ForEach(x =>
                {
                    DataRow row = dt1.NewRow();
                    row[0]=x.id;
                    row[1]=x.name;
                    row[2]=x.work;
                    row[3] = x.worknum;                dt1.Rows.Add(row);
                });            foreach (DataRow i in dt1.Rows)
                {
                    Console.WriteLine("{0} {1} {2} {3}", i[0], i[1], i[2],i[3]);
                }              Console.ReadLine();
            }
      

  4.   

    正月版主,帮我看看这个 http://bbs.csdn.net/topics/392308344
      

  5.   

    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("id", typeof(int));
                dt.Columns.Add("name", typeof(string));
                dt.Columns.Add("work", typeof(string));            dt.Rows.Add(1, "张三", "test1");
                dt.Rows.Add(2, "张三", "test1");
                dt.Rows.Add(3, "李四", "test2");
                dt.Rows.Add(4, "王五", "test3");            var result = dt.AsEnumerable()
                    .GroupBy(t => new { name = t.Field<string>("name"), work = t.Field<string>("work") })
                    .Select(t => new { name = t.Key.name, work = t.Key.work, worknum = t.Count() });            int index = 0;
                foreach (var r in result)
                {
                    Console.WriteLine("{0} {1} {2} {3}", ++index, r.name, r.work, r.worknum);
                }
            }
        }
    }