Каков наилучший способ добавить столбец в существующий набор данных? - PullRequest
2 голосов
/ 29 июня 2010

Хорошо, мое описание немного скучно, но терпите меня.

У меня есть два чрезвычайно длинных запроса, которые я выполняю для нескольких таблиц, используя 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";

(Пожалуйста, не беспокойтесь о синтаксисе запросов выше, я выполнил запросы, и они оба возвращают ожидаемые результаты.)

Я хотел бы объединить эти две таблицы в один набор данных (или любую другую структуру, которая может использоваться в качестве источника данных для вида сетки). Столбец «имя» уникален, некоторые другие тоже могут быть, я могу проверить. Я хочу, чтобы столбцы финальной таблицы напоминали

Имя Время1 Время2 Адрес анализа

  • Порядок столбцов не имеет большого значения, но если это не слишком много работы, я бы предпочел порядок выше.
  • Я хотел бы выполнить математические операции над временем1 и временем2 и соответственно обновить столбец анализа. Мне лучше делать это в 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 Ответ

1 голос
/ 30 июня 2010

Ответ можно найти здесь.С помощью нескольких настроек я получил именно то, что хотел.http://social.msdn.microsoft.com/forums/en-US/adodotnetdataproviders/thread/f122d7f4-3b7d-4d93-bd0f-8bb57cd990a4/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...