ВЫБЕРИТЕ из datatable в datatable - PullRequest
0 голосов
/ 09 июля 2010

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

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

Есть идеи, как это можно сделать?

Ответы [ 4 ]

1 голос
/ 09 июля 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"]));
}
1 голос
/ 09 июля 2010

Звучит так, будто вы решаете проблему неправильно;подсказка - это способ, которым вы дублируете данные и пытаетесь объединить таблицы.

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

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

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

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

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) 

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

table4.Columns.Add
0 голосов
/ 09 июля 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...