将列添加到现有数据集的最佳方法是什么?

时间:2010-06-29 04:39:26

标签: c# asp.net merge dataset

好的,我的描述有点啰嗦,但请耐心等待。

我有两个非常长的查询,我使用INNER JOIN在多个表上运行。这两个查询之间的唯一区别是它们为一个WHERE子句采用不同的输入值,它们来自两个单独的DropDownLists。这些查询的结果是相同的,除了time1 / time2列。

string query1 = "select Name = t1.name, time1=(SELECT hours FROM table3 WHERE street=list1.selectedvalue), t2.address from [table1] t1 INNER JOIN [table2] t2 ON t1.param = t2.param ORDER BY Name";

string query2 = "select Name = t1.name, time1=(SELECT hours FROM table3 WHERE street=list2.selectedvalue), t2.address from [table1] t1 INNER JOIN [table2] t2 ON t1.param = t2.param ORDER BY Name";

(请不要理会上面的查询语法,我已经执行了查询,它们都返回了预期的结果。)

我想将这两个表合并为一个数据集(或者可以用作gridview的数据源的任何其他结构)。 'name'列是唯一的,有些可能也是,我可以查看。我希望最终的表格列类似于

名称时间1时间2分析地址

  • 列的顺序并不重要,但如果不是太多工作,我宁愿选择上面的顺序。
  • 我想在time1和time2上执行数学运算,并相应地更新分析列。我最好在C#或JS中做这件事吗?

目前,我正在使用数据表来收集两个查询的结果。我尝试使用Datatable.Merge方法,但实际上将行数加倍(类似于外连接的类型),尽管命名列相同(在columns.Add(new DataColumn ...)

感谢您的关注:)感谢您的投入。

            Datatable dt1 = new datatable;
            Datatable dt2 = new datatable;

            dt1.Columns.Add(new DataColumn("name", typeof(string)));
            dt1.Columns.Add(new DataColumn("time1", typeof(int)));
            dt1.Columns.Add(new DataColumn("time2", typeof(int)));
            dt1.Columns.Add(new DataColumn("analysis", typeof(string)));
            dt1.Columns.Add(new DataColumn("address", typeof(string)));

            SqlDataReader dr = cmd1.ExecuteReader();
            while (dr.Read())
            {
                DataRow drow = new DataRow();
                drow["name"] = dr["name"].ToString();
                drow["time1"] = dr["time1"];
                drow["address"] = dr["CurrentTime"].ToString();
                dt1.Rows.Add(drow);
            }
            dr.Close();

            dr = cmd2.ExecuteReader();
            while (dr.Read())
            {
                DataRow drow = new DataRow();
                drow["time2"] = dr["time1"];
                drow["analysis"] = "I need javascript here";
                dt2.Rows.Add(drow);
            }
            dr.Close();

            dt1.Merge (dt2);
            this.GridView1.DataSource = dt1;
            this.GridView1.DataBind;

1 个答案:

答案 0 :(得分:1)

答案可以在这里找到。通过一些调整,我得到它完全按我想要的那样做。 http://social.msdn.microsoft.com/forums/en-US/adodotnetdataproviders/thread/f122d7f4-3b7d-4d93-bd0f-8bb57cd990a4/