【提问】请教个DataTable的合并问题

Sinmo703 2018-01-12 10:48:30
请教个问题啊,我有个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
请问这个该怎么写
...全文
191 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
nihai2017 2018-01-12
  • 打赏
  • 举报
回复

            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;
全栈极简 2018-01-12
  • 打赏
  • 举报
回复
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);
            }
        }
    }
}
Allblus 2018-01-12
  • 打赏
  • 举报
回复
正月版主,帮我看看这个 http://bbs.csdn.net/topics/392308344
正怒月神 2018-01-12
  • 打赏
  • 举报
回复
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();
}

110,502

社区成员

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

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

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