关于两个Datatable中列的复制问题

sardineany 2011-03-25 10:10:44
打个比方吧,现在已经有了4个存储过程 分别是查询 总分 数学分 语文分 外语分的。返回的都是1个表,他们之间的差异就是其中的一列不同
比如
表1
姓名 性别 数学成绩
表2
姓名 性别 语文成绩
表三
姓名 性别 外语成绩
表四
姓名 性别 总成绩

现在要做的是把总成绩的表中显示其他三个表中各个学科的成绩
最终表:
姓名 性别 数学成绩 语文成绩 外语成绩 总成绩
直接复制说 :列已属于其他表
PS:不想回去改存储过程了,改那个很麻烦……所以就想在后台拼接一下列,然后达到目的
希望高手指点
...全文
368 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
sardineany 2011-03-25
  • 打赏
  • 举报
回复
解决了,感谢大家,下午结贴。。顺便祝大家周末愉快~
zzmsyt 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 fangxinggood 的回复:]
Linq2DataTable, 根据 “姓名” join 一下。
PS: 姓名不会重复吧。如果某人某课没参加考试,某个表里数据会不会少呢?总成绩表里应该是主表。。。

比如:

C# code
DataTable data1 = new DataTable();
data1.Columns.Add("姓名");
data1.Columns.Add("总成绩");
data1.Ro……
[/Quote]
学习
qldsrx 2011-03-25
  • 打赏
  • 举报
回复
你只要创建一个新的DataTable,然后对3个表都排序下,遍历每行数据填充新的DataTable即可。其实用Linq也是这么实现的,只不过隐藏了复杂的过程而已。
sardineany 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 fangxinggood 的回复:]

Linq2DataTable, 根据 “姓名” join 一下。
PS: 姓名不会重复吧。如果某人某课没参加考试,某个表里数据会不会少呢?总成绩表里应该是主表。。。

比如:
C# code
DataTable data1 = new DataTable();
data1.Columns.Add("姓名");
data1.Columns.Add("总成绩");
data1.Rows.A……
[/Quote]
我想说我用的是05……
老胡写代码 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 fangxinggood 的回复:]
Linq2DataTable, 根据 “姓名” join 一下。
PS: 姓名不会重复吧。如果某人某课没参加考试,某个表里数据会不会少呢?总成绩表里应该是主表。。。

比如:

C# code
DataTable data1 = new DataTable();
data1.Columns.Add("姓名");
data1.Columns.Add("总成绩");
data1.Ro……
[/Quote]
膜拜,学习了~
HYH 2011-03-25
  • 打赏
  • 举报
回复
新建一个datatable,做好列,循环中把那四个表的数据加入到新建表的相对列中
机器人 2011-03-25
  • 打赏
  • 举报
回复
Linq2DataTable, 根据 “姓名” join 一下。
PS: 姓名不会重复吧。如果某人某课没参加考试,某个表里数据会不会少呢?总成绩表里应该是主表。。。

比如:
DataTable data1 = new DataTable();
data1.Columns.Add("姓名");
data1.Columns.Add("总成绩");
data1.Rows.Add(new object[] { "A", 300 });
data1.Rows.Add(new object[] { "B", 250 });

DataTable data2 = new DataTable();
data2.Columns.Add("姓名");
data2.Columns.Add("数学");
data2.Rows.Add(new object[] { "A", 70 });
data2.Rows.Add(new object[] { "B", 50 });

DataTable data3 = new DataTable();
data3.Columns.Add("姓名");
data3.Columns.Add("语文");
data3.Rows.Add(new object[] { "A", 90 });
data3.Rows.Add(new object[] { "B", 60 });

var merge = from main in data1.AsEnumerable()
join sx in data2.AsEnumerable() on main.Field<string>("姓名") equals sx.Field<string>("姓名")
join yw in data3.AsEnumerable() on main.Field<string>("姓名") equals yw.Field<string>("姓名")
select new
{
Name = main.Field<string>("姓名"),
Math = sx.Field<object>("数学"),
Chinese = yw.Field<object>("语文"),
Sum = main.Field<object>("总成绩"),
};

foreach (var m in merge)
Console.WriteLine(m);


输出:
{ Name = A, Math = 70, Chinese = 90, Sum = 300 }
{ Name = B, Math = 50, Chinese = 60, Sum = 250 }
老胡写代码 2011-03-25
  • 打赏
  • 举报
回复
其实还有个笨办法,你把这几个表的框架提出来,Merge成一个新表,然后再用Foreach遍历给每一行赋值,呵呵,不过这个办法太笨了,期待有高人啊
老胡写代码 2011-03-25
  • 打赏
  • 举报
回复
试试这个
DataTable dt1=new DataTable();
DataTable dt2=new DataTable();
dt1.Merge(dt2);
sardineany 2011-03-25
  • 打赏
  • 举报
回复
datatable中操作,不动数据库了
dbacv232kwe 2011-03-25
  • 打赏
  • 举报
回复
问句,你是要数据库查询解决方法还是代码Datatable解决方法
老胡写代码 2011-03-25
  • 打赏
  • 举报
回复
不用修改现有存储过程,只是加一个新存储过程,联合查询,怎么样?

110,533

社区成员

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

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

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