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

解决方案 »

  1.   

    问句,你是要数据库查询解决方法还是代码Datatable解决方法
      

  2.   

    datatable中操作,不动数据库了
      

  3.   

    试试这个
    DataTable dt1=new DataTable();
    DataTable dt2=new DataTable();
    dt1.Merge(dt2);
      

  4.   

    其实还有个笨办法,你把这几个表的框架提出来,Merge成一个新表,然后再用Foreach遍历给每一行赋值,呵呵,不过这个办法太笨了,期待有高人啊
      

  5.   

    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 }
      

  6.   

    新建一个datatable,做好列,循环中把那四个表的数据加入到新建表的相对列中
      

  7.   

    你只要创建一个新的DataTable,然后对3个表都排序下,遍历每行数据填充新的DataTable即可。其实用Linq也是这么实现的,只不过隐藏了复杂的过程而已。