DataTable в C # - PullRequest
       24

DataTable в C #

2 голосов
/ 15 июля 2010

Допустим, у меня есть две таблицы данных DT1 и DT2 с одной строкой.

DT1 имеет 3 столбца: Col1, Col2 и Col3

и

DT2 имеет 2 столбца: ColA, ColB.

Возможно ли объединить эти две таблицы данных по горизонтали, чтобы я получил Col1, Col2, Col3, ColA и ColB?

Ответы [ 3 ]

2 голосов
/ 15 июля 2010

Я думаю, вам нужно добавить новые столбцы и скопировать данные либо в третью таблицу, либо в одну из существующих таблиц

    DataTable dt1 = new DataTable();

    dt1.Columns.Add("col1", typeof(string));
    dt1.Columns.Add("col2", typeof(string));
    dt1.Columns.Add("col3", typeof(string));

    DataTable dt2 = new DataTable();

    dt2.Columns.Add("cola", typeof(string));
    dt2.Columns.Add("colb", typeof(string));

    object[] row = {'1', '2', '3'};
    dt1.Rows.Add(row);

    object[] row1 = { 'a', 'b' };
    dt2.Rows.Add(row1);

    // Create columns in dt1
    dt1.Columns.Add("cola", typeof(string));
    dt1.Columns.Add("colb", typeof(string));

    // Copy data from dt2
    dt1.Rows[0]["cola"] = dt2.Rows[0]["cola"];
    dt1.Rows[0]["colb"] = dt2.Rows[0]["colb"];
0 голосов
/ 15 июля 2010

До тех пор, пока вы просто хотите получить коллекцию, которую можете связать, вы можете делать следующее:

var results = from rs1 in table1.Rows.Cast<DataRow>()
              join rs2 in table2.Rows.Cast<DataRow>() on rs1.Field<int>("col1") equals rs2.Field<int>("colA")                          
              select new { col1 = rs1.Field<int>("col1"), col2 = rs1.Field<string>("col3"), col3 = rs1.Field<string>("col3"), colA = rs1.Field<int>("colA"), colB = rs1.Field<string>("colB") };

Вы не получите DataTable, а IEnumerable<T> коллекцию объектов анонимного типа, как определенов утверждении выбора.Obvoiusly, я только что угадал критерии соединения и тип данных столбцов, поэтому вам нужно будет указать их в соответствии с вашими фактическими данными.

0 голосов
/ 15 июля 2010

AFAIK нет, DataSet и DataTable не поддерживают автоматическое объединение.Вам нужно будет выполнить соединение вручную, добавив новые столбцы в таблицу и скопировав значения столбцов из других таблиц.

...