DataTable新增列后 在新增列的指定行添加数据

smokinggod 2017-01-11 10:08:24
例如 :
DataTable1:
序号 班级 类型 姓名 分数
1 一班 全日制 张三 95.03
2 二班 寄读 李四 62.36
3 三班 全日制 王二 98.54
4 四班 全日制 李武 68.55


DataTable2:
班级 姓名 考核分
一班 张三 63
四班 李武 54

希望处理得到的结果:
序号 班级 类型 姓名 分数 考核分 合计
1 一班 全日制 张三 95.03 63 158.03
2 二班 寄读 李四 62.36 62.36
3 三班 全日制 王二 98.54 98.54
4 四班 全日制 李武 68.55 54 122.55

结果表格有点乱 截图显示

求助高手,非常感谢!

...全文
547 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
smokinggod 2017-01-11
  • 打赏
  • 举报
回复
引用 6 楼 Chinajiyong 的回复:
其实就是left join,结果如下:

1  一班  全日制  张三  95.03  63  158.03
2  二班  寄读  李四  62.36  0  62.36
3  三班  全日制  王二  98.54  0  98.54
4  四班  全日制  李武  68.55  54  122.55
哥,你好牛。可以结贴了。哈哈,非常感谢!!
EnForGrass 2017-01-11
  • 打赏
  • 举报
回复
其实就是left join,结果如下:

1  一班  全日制  张三  95.03  63  158.03
2  二班  寄读  李四  62.36  0  62.36
3  三班  全日制  王二  98.54  0  98.54
4  四班  全日制  李武  68.55  54  122.55
smokinggod 2017-01-11
  • 打赏
  • 举报
回复
dataTable1 和dataTable2 的数据我想合并成我截图的这种效果。不用数据库,只是在datatable里面实现。
EnForGrass 2017-01-11
  • 打赏
  • 举报
回复

 DataTable dt = new DataTable();
            dt.Columns.Add("序号", typeof(int));
            dt.Columns.Add("班级", typeof(string));
            dt.Columns.Add("类型", typeof(string));
            dt.Columns.Add("姓名", typeof(string));
            dt.Columns.Add("分数", typeof(decimal));

            DataRow dr1 = dt.NewRow();
            dr1["序号"] = 1;
            dr1["班级"] = "一班";
            dr1["类型"] = "全日制";
            dr1["姓名"] = "张三";
            dr1["分数"] = 95.03;
            dt.Rows.Add(dr1);

            DataRow dr2 = dt.NewRow();
            dr2["序号"] = 2;
            dr2["班级"] = "二班";
            dr2["类型"] = "寄读";
            dr2["姓名"] = "李四";
            dr2["分数"] = 62.36;
            dt.Rows.Add(dr2);

            DataRow dr3 = dt.NewRow();
            dr3["序号"] = 3;
            dr3["班级"] = "三班";
            dr3["类型"] = "全日制";
            dr3["姓名"] = "王二";
            dr3["分数"] = 98.54;
            dt.Rows.Add(dr3);

            DataRow dr4 = dt.NewRow();
            dr4["序号"] = 4;
            dr4["班级"] = "四班";
            dr4["类型"] = "全日制";
            dr4["姓名"] = "李武";
            dr4["分数"] = 68.55;
            dt.Rows.Add(dr4);

            DataTable dt2 = new DataTable();
            dt2.Columns.Add("班级", typeof(string));
            dt2.Columns.Add("姓名", typeof(string));
            dt2.Columns.Add("考核分", typeof(decimal));
            DataRow dr5 = dt2.NewRow();
            dr5["班级"] = "一班";
            dr5["姓名"] = "张三";
            dr5["考核分"] = 63;
            dt2.Rows.Add(dr5);
            DataRow dr6 = dt2.NewRow();
            dr6["班级"] = "四班";
            dr6["姓名"] = "李武";
            dr6["考核分"] = 54;
            dt2.Rows.Add(dr6);


            var vardt = from rHead in dt.AsEnumerable()
                        join rTail in dt2.AsEnumerable()
                        on new { b = rHead.Field<string>("班级"), x = rHead.Field<string>("姓名") } equals new { b = rTail.Field<string>("班级"), x = rTail.Field<string>("姓名") } into temp
                        from t in temp.DefaultIfEmpty()
                        select new
                        {
                            序号 = rHead.Field<int>("序号"),
                            班级 = rHead.Field<string>("班级"),
                            类型 = rHead.Field<string>("类型"),
                            姓名 = rHead.Field<string>("姓名"),
                            分数 = rHead.Field<decimal>("分数"),
                            考核分 = (t == null ? 0 : t.Field<decimal>("考核分")),
                            合计 = (rHead.Field<decimal>("分数") + (t == null ? 0 : t.Field<decimal>("考核分")))
                        };


            foreach (var r1 in vardt)
            {

                Console.WriteLine(r1.序号.ToString() + "  " + r1.班级.ToString() + "  " + r1.类型.ToString() + "  " + r1.姓名.ToString() + "  " + r1.分数.ToString() + "  " + r1.考核分.ToString() + "  " + r1.合计.ToString());
           
            }
闭包客 2017-01-11
  • 打赏
  • 举报
回复
引用 2 楼 closurer 的回复:
你所说的【在新增列的指定行添加数据】在技术上实际是【内连接(inner join)】
搞错了,你这个例子是【左连接(left join)】
闭包客 2017-01-11
  • 打赏
  • 举报
回复
你所说的【在新增列的指定行添加数据】在技术上实际是【内连接(inner join)】
闭包客 2017-01-11
  • 打赏
  • 举报
回复
不知道你想得到什么样的结果。 看上去你的表格和你期望得到的结果是一致的。

110,552

社区成员

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

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

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