powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / объединение двух DataTable с одинаковыми схемами
10 сообщений из 10, страница 1 из 1
объединение двух DataTable с одинаковыми схемами
    #36408825
dezamif72
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется два DataSet ds1 и ds2 содержащие DataTable dt1 и dt2 соответственно, с одинаковыми именами и схемой. Возможно ли объединить dt1 и dt2

На картинке содержание dt1 и dt2. хочется чтобы получилось dt1+dt2.

Пробовал методом Merge(), но он просто добавляет данные из одного в другой.
...
Рейтинг: 0 / 0
объединение двух DataTable с одинаковыми схемами
    #36408925
Курочка Ряба
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Merge будет работает как Combine Data, если у основного (первого) набора будет задан PrimaryKey.

Пример:

Создание и наполнение
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
// Первая таблица
DataTable table1 = new DataTable("table1");
DataColumn key1 = table1.Columns.Add("Id", typeof(int));
table1.Columns.Add("Value", typeof(string));
table1.Columns.Add("Cost1", typeof(int));
table1.Columns.Add("Cost2", typeof(int));

// Вторая таблица
DataTable table2 = new DataTable("table2");
DataColumn key2 = table2.Columns.Add("Id", typeof(int));
table2.Columns.Add("Value", typeof(string));
table2.Columns.Add("Cost1", typeof(int));
table2.Columns.Add("Cost2", typeof(int));

// Для объединения по ключам необходимо, чтобы у первой таблицы был задан PrimaryKey
DataColumn[] keyCol = new DataColumn[1];
keyCol[0] = key1;
table1.PrimaryKey = keyCol;

// Наполнение таблиц данными
for (int i = 0; i < 10; i++)
{
    table1.Rows.Add(i, "value" + i, i + 100, null);
}

for (int i = 0; i < 5; i++)
{
    table2.Rows.Add(i, "value" + i, null, i + 200);
}


1 вариант (Merge):

Код: plaintext
table1.Merge(table2);

2 вариант (left join):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
var query = from t1 in table1.AsEnumerable()
        join t2 in table2.AsEnumerable() on t1["Id"] equals t2["Id"] into x
        from _t2 in x.DefaultIfEmpty()
        select new
        {
            Id = t1.Field<int>("Id"),
            Value = t1.Field<string>("Value"),
            Cost1 = t1.Field<int>("Cost1"),
            Cost2 = _t2 == null ? 0 : _t2.Field<int>("Cost2")
        };

3 вариант (join, подойдет, если у Вас ключи в таблицах совпадают):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
var query2 = from t1 in table1.AsEnumerable()
            join t2 in table2.AsEnumerable() on t1["Id"] equals t2["Id"]
            select new
            {
                Id = t1.Field<int>("Id"),
                Value = t1.Field<string>("Value"),
                Cost1 = t1.Field<int>("Cost1"),
                Cost2 = t2.Field<int>("Cost2"),
            };
...
Рейтинг: 0 / 0
объединение двух DataTable с одинаковыми схемами
    #36408988
vinvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
            foreach (testDataSet.Table_2Row  dr2 in ds.Table_2.Rows)
            {
                testDataSet.Table_1Row dr1 = ds.Table_1.NewTable_1Row();
                dr1.Name = dr2.Name;
                ds.Table_1.AddTable_1Row(dr1);
            }
...
Рейтинг: 0 / 0
объединение двух DataTable с одинаковыми схемами
    #36410441
dezamif72
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vinvin,
может я чего то не понимаю, но где вы такие методы нашли, и что за типы переменных, которым вы присваиваете значения???
...
Рейтинг: 0 / 0
объединение двух DataTable с одинаковыми схемами
    #36410502
Курочка Ряба
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dezamif72vinvin,
может я чего то не понимаю, но где вы такие методы нашли, и что за типы переменных, которым вы присваиваете значения???
Это типизированный датасет. Исчадие ада от горе-разработчиков. Не обращайте внимание :)
...
Рейтинг: 0 / 0
объединение двух DataTable с одинаковыми схемами
    #36410613
dezamif72
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
неужели нельзя сделать объединение без ключей и других примочек?? У меня просто таблицы, без ключей и никак не связаны друг с другом.
...
Рейтинг: 0 / 0
объединение двух DataTable с одинаковыми схемами
    #36410675
Курочка Ряба
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dezamif72неужели нельзя сделать объединение без ключей и других примочек?? У меня просто таблицы, без ключей и никак не связаны друг с другом.
Тебе мало кода, который я написал? Тогда - в сад.
...
Рейтинг: 0 / 0
объединение двух DataTable с одинаковыми схемами
    #36410719
dezamif72
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Курочка Ряба,
Спасибо огроменное, все работает!!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
объединение двух DataTable с одинаковыми схемами
    #37617711
wysiwyg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как вывести содержимое query2 в dataGridView? Строка "dataGridView1.DataSource = query2;" комплируется, но данные не отображаются.
...
Рейтинг: 0 / 0
объединение двух DataTable с одинаковыми схемами
    #37618047
wysiwyg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нашел, query2.ToList()
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / объединение двух DataTable с одинаковыми схемами
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]