2015-03-13 2 views
0

Можно ли каким-либо образом обновить значение в одном объекте, относящемся к другим данным.Обновить значение в datatable from another datatable

Например, скажем, у меня есть два dat1 dat1 и dt2.

enter image description hereenter image description here

Как было показано выше, у меня есть два DataTable, и я должен заменить значение столбца имя_таблицы в 1-ом DataTable со значением столбца newtable_name от 2-го DataTable с отображением table_name, который является общим в обоих DataTable.

+0

посмотрите про "триггеры" и это funcionality , они могут вам помочь. Вы также можете проверить «задания», но, вероятно, лучший подход для вас - использовать триггер во второй таблице. – Veelicus

+0

Спасибо за ответ Veellicus. Но это C# .net datatable, который я получил после некоторой операции, выполняемой в коде. – Harsh

+0

Вы хотите сделать это в таблице базы данных или в виде данных в памяти? (Это две разные вещи, и вам нужно использовать разные подходы в зависимости от того, что вы пытаетесь обновить) – Tim

ответ

0

Вы можете выбрать код, как показано ниже в C#:

dt1.Merge(dt2); 
dt1.AcceptChanges(); 

Здесь dt1 записи обновляются со значениями в DataTable dt2 в 1 сообщении. И второе утверждение фиксирует изменения, сделанные в DataTable dt1. Но главное, что вам нужно гарантировать, это то, что обе таблицы должны иметь одну и ту же схему, то есть . Названия столбцов в этом случае

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

+1

Объединить функциональность не решит мою цель, потому что она не заменит ваше значение новым в существующем значении. – Harsh

0

Я думаю, что Linq - это путь, если вы находитесь на текущем обороте рамки.

This answer должно начаться.

+0

Я не уверен, что это сработает для меня или нет, поскольку я не слишком хорошо знаком с списком LInq и Generic. – Harsh

+0

ОК, найдите объект DataRelation. Вы можете присоединиться к двум таблицам в памяти, и как только вы это сделаете, вы сможете обновить Table_name в t1 с новым значением Table_name в T2. Это займет немного работы, но это выполнимо. – Tim

+0

Для DataRelation нужен уникальный столбец идентификатора для связи между двумя типами данных для сопоставления, и у меня просто есть имя_таблицы для сопоставления, которое не является уникальным. – Harsh

2

Вот решение для выборки данных ниже:

foreach(DataRow row in originalTable.Rows) 
{ 
    DataRow rowsToUpdate = newNameTable.AsEnumerable().FirstOrDefault(r => r.Field<string>("table_name") == row.Field<string>("table_name")); 
    row.SetField("table_name", rowsToUpdate.Field<string>("table_name_new"));  
} 

My Sample Data I используется для проверки, работает ли это или нет:

DataTable originalTable = new DataTable(); 
originalTable.Clear(); 

originalTable.Columns.Add("Id"); 
originalTable.Columns.Add("table_name"); 

DataRow originalRow1 = originalTable.NewRow(); 
originalRow1["Id"] = 1; 
originalRow1["table_name"] = "Table1"; 
originalTable.Rows.Add(originalRow1); 

DataRow originalRow2 = originalTable.NewRow(); 
originalRow2["Id"] = 2; 
originalRow2["table_name"] = "Table2"; 
originalTable.Rows.Add(originalRow2); 

DataTable newNameTable = new DataTable(); 
newNameTable.Clear(); 

newNameTable.Columns.Add("table_name"); 
newNameTable.Columns.Add("table_name_new"); 

DataRow newNameRow = newNameTable.NewRow(); 
newNameRow["table_name"] = "Table1"; 
newNameRow["table_name_new"] = "Table1_new"; 
newNameTable.Rows.Add(newNameRow); 

DataRow newNameRow2 = newNameTable.NewRow(); 
newNameRow2["table_name"] = "Table2"; 
newNameRow2["table_name_new"] = "Table2_new"; 
newNameTable.Rows.Add(newNameRow2); 
+0

Спасибо Маркус. Это работает нормально. Но как насчет производительности в большом количестве данных?Потому что у меня есть большой объем данных как для данных. – Harsh