打个比方吧,现在已经有了4个存储过程 分别是查询 总分 数学分 语文分 外语分的。返回的都是1个表,他们之间的差异就是其中的一列不同
比如
表1
姓名 性别 数学成绩
表2
姓名 性别 语文成绩
表三
姓名 性别 外语成绩
表四
姓名 性别 总成绩现在要做的是把总成绩的表中显示其他三个表中各个学科的成绩
最终表:
姓名 性别 数学成绩 语文成绩 外语成绩 总成绩
直接复制说 :列已属于其他表
PS:不想回去改存储过程了,改那个很麻烦……所以就想在后台拼接一下列,然后达到目的
希望高手指点
比如
表1
姓名 性别 数学成绩
表2
姓名 性别 语文成绩
表三
姓名 性别 外语成绩
表四
姓名 性别 总成绩现在要做的是把总成绩的表中显示其他三个表中各个学科的成绩
最终表:
姓名 性别 数学成绩 语文成绩 外语成绩 总成绩
直接复制说 :列已属于其他表
PS:不想回去改存储过程了,改那个很麻烦……所以就想在后台拼接一下列,然后达到目的
希望高手指点
DataTable dt1=new DataTable();
DataTable dt2=new DataTable();
dt1.Merge(dt2);
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 }