我有两个数据访问层的方法,分别返回两个 DataTable ,一个DataTable 是查询的人的基本信息,   比如: playerid   张三    男     22岁
另一个DataTable 是查询人报的项目名称   比如: playerid   100米   200米要得到的效果:  张三    男     22岁    100米    200米我要在业务层把两个DataTable 合成一个,因为在界面层只能接受一个DataTable 或 DataSet

解决方案 »

  1.   

    那你怎么不直接在返回一个包含张三    男     22岁    100米    200米的dataset呢,用sql语句关联查询就可以得到string sql="a.性命,a.性别,a.年龄,b.一百米,b.二百米 from 基本信息 a left join 人报的项目名称 b on a.playerid=b.playerid"
      

  2.   

    那你怎么不直接在数据层返回一个包含张三    男     22岁    100米    200米的dataset呢,用sql语句关联查询就可以得到string sql="select a.性命,a.性别,a.年龄,b.一百米,b.二百米 from 基本信息 a left join 人报的项目名称 b on a.playerid=b.playerid"
      

  3.   

    楼上的好像误解了贴主的意思了。贴主说的前提是这两个表已存在于内存中,这时他想把两个表连接起来得到他想要的结果,而不这个两表在数据库系统,然后用一条sql查询语句连接取得结果。这个问题我以前也想到过,我想微软应该在他的ADO.NET框架里边即在DataSet里边支持至一部分sql的查询语句(如连接),这样的话意义应该很大。实际在数据库设计中一个对像的信息我们往往不是放在一个表里边边而多个表里边,
      

  4.   

    给楼主一个思路,不知道可不可以接受:生成一个DataTable,把前面两个表的数据对应起来然后白拷贝到新的DataTable里,
      

  5.   

    谢谢各位的参与,我的问题是没有办法把两个数据集连接起来。前一个 DataTable 已经是从视图(三个表)查询出来的,上面的张三我只是举个例子;
    第二个 DataTable 是程序中动态生成的临时表,然后查询出临时表的数据,是通过SQL编程来实现的。其实我把这个临时表建在数据库中,通过SQL编程来给这个表添数据,再把这个表跟前面的表一起做成视图也是可行的,但是这样就在数据库中留下了一个没有用的表了,也比较麻烦。如果有办法把两个 DataTable 合在一起就什么问题都解决了,请大家多提思路啊!
      

  6.   

    To:  huang1023(啊邦)你说的思路我也想过,但是不知道怎么实现?能帮忙写点测试代码吗?
      

  7.   

    把两张datatable起不同的名,然后放到一个dataset中,最后返回dataset
      

  8.   

    private DataTable GetMergedTable(DataTable table1, DataTable table2)
    {
    DataTable mergedTable = CreateMergedTable(); foreach (DataRow arow in table1.Rows)
    {
    string playerId = arow["PlayerId"].ToString();
    DataRow brow = table2.Rows.Find(playerId); if (brow != null)
    {
    DataRow newRow = mergedTable.NewRow();
    newRow["PlayerId"] = playerId;
    newRow["Name"] = arow["Name"].ToString();
    newRow["Sex"] = arow["Sex"].ToString();
    newRow["Age"] = arow["Age"].ToString();
    newRow["Length1"] = brow["Length1"].ToString();
    newRow["Length1"] = brow["Length2"].ToString();
    }
    } return mergedTable;
    }private DataTable CreateMergedTable()
    {
    DataTable table = new DataTable();
    DataColumnCollection columns = table.Columns;
            
    columns.Add("PlayerId", typeof(System.Int32));
    columns.Add("Name", typeof(System.String));
    columns.Add("Sex", typeof(System.String));
    columns.Add("Age", typeof(System.String));
    columns.Add("Length1", typeof(System.String));
    columns.Add("Length2", typeof(System.String));

    table.PrimaryKey = new DataColumn[] {columns["PlayerId"]};       
     
    return table;
    }
      

  9.   

    建议使用Ado.net下的表达式来实现你需要的功能,
    http://www.microsoft.com/china/MSDN/library/data/dataAccess/ADONETEXP.mspx