SELECT из datatable в datatable

У меня есть три таблицы данных с данными:

table1 has columns AGE, FIRST_NAME, LAST_NAME, FAVORITE_COLOR, PHONE
table2 has columns AGE, FIRST_NAME, LAST_NAME, PHONE
table3 has columns AGE, LAST_NAME, FIRST_NAME, FAVORITE_COLOR, PHONE

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

table4 has columns AGE, LAST_NAME, FIRST_NAME, PHONE

Любые идеи, как это можно сделать?


person tkalve    schedule 09.07.2010    source источник
comment
почему вы создаете таблицу для table4 вместо представления?   -  person P.Brian.Mackey    schedule 09.07.2010
comment
Таблица 4 выглядит так же, как Таблица 3, за исключением поля FAVORITE_COLOR.   -  person Phil Gan    schedule 09.07.2010
comment
table1, table2 и table3 считываются из трех разных файлов CSV, которые. Мне нужно передать данные из файлов CSV в базу данных, но они имеют разные столбцы и порядок столбцов.   -  person tkalve    schedule 09.07.2010
comment
ImportRow работает, даже если порядок столбцов отличается. ImportRow соответствует столбцу   -  person Michael Buen    schedule 09.07.2010


Ответы (4)


DataTable имеет метод под названием «Объединение», поэтому:

table4.Merge(table1, true, MissingSchemaAction.Ignore) // ignores any columns that are not in table4's schema
table4.Merge(table2, true, MissingSchemaAction.Ignore) 
table4.Merge(table3, true, MissingSchemaAction.Ignore) 

Предполагая, что вы дали table4 столбцы, которые вы хотите сначала, конечно, используя

table4.Columns.Add
person simonalexander2005    schedule 09.07.2010

Похоже, вы решаете проблему неправильно; подсказка заключается в том, как вы дублируете данные и пытаетесь объединить таблицы.

Такого рода вещи обычно достигаются на уровне доступа к данным (DAL), то есть с помощью лучшего запроса к базе данных.

Возможно, если вы предоставите больше контекста проблеме, которую пытаетесь решить, мы сможем проанализировать и посмотреть, сможем ли мы найти лучшее решение. Извините, если это звучит снисходительно, но это не так — как вы знаете, существует бесконечное количество способов решения проблемы в программном обеспечении!

Надеюсь, это поможет!

person Kieren Johnstone    schedule 09.07.2010

Попробуйте .ImportRow:

var dtA = new DataTable
{
    Columns =
    {            
        { "Age", typeof(int) },
        { "Middlename", typeof(string) },
        { "Firstname", typeof(string) }
    }
};

dtA.Rows.Add(1, "Yeah", "John");
dtA.Rows.Add(2, "Yo", "Paul");

var dtB = new DataTable
{
    Columns =
    {
        { "Age", typeof(int) },
        { "Firstname", typeof(string) }
    }
};

dtB.Rows.Add(3, "George");
dtB.Rows.Add(4, "Ringo");



foreach (DataRow r in dtA.Rows)
    dtB.ImportRow(r);


foreach (DataRow r in dtB.Rows)
{
    MessageBox.Show(string.Format("{0} {1}", r["Age"], r["Firstname"]));
}
person Michael Buen    schedule 09.07.2010

вы можете попробовать что-то вроде этого:

DataSet dataset; //dataset with all datatables (table1, table2, table3)
DataTable table4; //datatable with the result "union"
foreach (DataTable dt in dataset.Tables)
{
    foreach (DataRow dr in dt.Rows)
    {
        DataRow nr = table4.NewRow();
        foreach (DataColumn dc in table4.Columns)
        {
            try
            {
                nr[dc.ColumnName] = dr[dc.ColumnName];
            }
            catch
            {
                nr[dc.ColumnName] = "COLUMN NOT FOUND";
            }
        }
        table4.Rows.Add(nr);
    }
}
person Giorgio Marziani de Paolis    schedule 09.07.2010