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

问题描述:

好的,我的描述有点啰嗦,但忍受着我。将列添加到现有数据集的最佳方式是什么?

我有两个非常长的查询,我在多个表上运行,使用INNER JOIN。这两个查询之间的唯一区别在于,它们从两个单独的DropDownLists中获取WHERE子句中的一个的不同输入值。这些查询的结果是相同的,除了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数据源的结构)。 “名称”列是独一无二的,其他一些可能也是如此,我可以查看。我想最后的表列类似

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

  • 列的顺序并不重要,非常多,但如果它没有太多的工作,我宁愿上面的顺序。
  • 我想对time1和time2进行数学运算,并相应地更新分析列。我最好在C#或JS做这个吗?

当前,我正在使用数据表来收集两个查询的结果。我尝试使用Datatable.Merge方法,但实际上使行数增加了一倍(类似于外连接),尽管命名列相同(在列中.Add(新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

在创建内部连接条件的表之间是否存在一些公共数据?你如何知道'str1'的哪一行应该被合并到'str2'的哪一行? – 2010-06-29 04:50:06

+0

可能是您尝试使用合并函数设置缺少的模式操作以避免外部连接行为。 – Thurein 2010-06-29 05:47:10

+0

Hi Lazy Bob,两个查询中的'name'字段对于每一行都是唯一的,并且是两个'hours'值匹配的基础 – Freakishly 2010-06-29 06:29:46

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

+0

这个答案已被标记为删除,因为是一个链接专用的答案。您能否编辑它,以便它包含足够的细节以便读者无需点击链接即可使用? – josliber 2016-01-24 22:38:27