Combinar 2 DataTables y almacenar en uno nuevo

Si tengo 2 DataTables (dtOne y dtTwo) y deseo fusionarlos y ponerlos en otra DataTable (dtAll). ¿Cómo puedo hacer esto en C #? Probé la statement Merge en la tabla de datos, pero esto devuelve vacío. ¿Merge preserva los datos? Por ejemplo, si lo hago:

dtOne.Merge(dtTwo); 

¿Cambia dtOne o cambia dtTwo y si alguno de ellos cambia, los cambios se conservan?

Sé que no puedo hacer esto porque Merge devuelve nulo, pero quiero poder almacenar la fusión de dtOne y dtTwo en dtAll:

 //Will Not work, How do I do this dtAll = dtOne.Merge(dtTwo); 

El método Merge toma los valores de la segunda tabla y los fusiona con la primera tabla, por lo que la primera ahora contendrá los valores de ambos.

Si desea conservar las dos tablas originales, primero puede copiar el original y luego fusionar:

 dtAll = dtOne.Copy(); dtAll.Merge(dtTwo); 

(Muy tarde, pero podría ayudar a alguien a tropezar con esta pregunta).

En lugar de dtAll = dtOne.Copy(); en la respuesta de Jeromy Irvine puedes hacer:

 dtAll = new DataTable(); ... dtAll.Merge(dtOne); dtAll.Merge(dtTwo); dtAll.Merge(dtThree); ... 

y así.

Esta técnica es útil en un bucle en el que desea combinar iterativamente tablas de datos:

 DataTable dtAllCountries = new DataTable(); foreach(String strCountry in listCountries) { DataTable dtCountry = getData(strCountry); //Some function that returns a data table dtAllCountries.Merge(dtCountry); } 
 dtAll = dtOne.Copy(); dtAll.Merge(dtTwo,true); 

El parámetro TRUE conserva los cambios.

Para más detalles, consulte el siguiente enlace. http://msdn.microsoft.com/en-us/library/wkk7s5zk.aspx

 DataTable dtAll = new DataTable(); DataTable dt= new DataTable(); foreach (int id in lst) { dt.Merge(GetDataTableByID(id)); // Get Data Methode return DataTable } dtAll = dt; 

Esto es lo que hice para unir dos tablas de datos y unir el resultado final a la vista de cuadrícula

  DataTable dtTemp=new DataTable(); for (int k = 0; k < GridView2.Rows.Count; k++) { string roomno = GridView2.Rows[k].Cells[1].Text; DataTable dtx = GetRoomDetails(chk, roomno, out msg); if (dtx.Rows.Count > 0) { dtTemp.Merge(dtx); dtTemp.AcceptChanges(); } }