asp.net 向现有数据集添加列的最佳方法是什么?

oxalkeyp  于 2023-05-08  发布在  .NET
关注(0)|答案(1)|浏览(254)

我有两个非常长的查询,我正在多个表上运行,使用INNER JOIN。这两个查询之间的唯一区别是,它们为其中一个WHERE子句获取不同的输入值,这些输入值是从两个单独的DropDownLists获取的。保存time 1/time 2列之外,这些查询的结果是相同的。

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分析地址

  • 列的顺序不是很重要,但如果不是太多的工作,我更喜欢上面的顺序。
  • 我想对time 1和time 2执行数学运算,并相应地更新分析列。我用C#还是JS做这个比较好?

目前,我正在使用datatable来收集这两个查询的结果。我尝试使用Datatable.Merge方法,但这实际上使行数加倍(有点像外部连接),尽管列的命名相同(在列中.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;

相关问题