将行从一个Datatable复制到另一个DataTable?

kar*_*tal 152 c# datatable

如何将特定行从DataTable复制到c#中的另一个Datable?会有不止一行.

Bra*_*ith 242

foreach (DataRow dr in dataTable1.Rows) {
    if (/* some condition */)
        dataTable2.Rows.Add(dr.ItemArray);
}
Run Code Online (Sandbox Code Playgroud)

上面的示例假设dataTable1并且dataTable2具有相同的数量,类型和列顺序.

  • 这不会导致"此行已经属于另一个表". (18认同)
  • @DawoodAbbasi只有当你在表达式的末尾遗漏了`ItemArray`部分时才会发生这种情况.确保添加行的值,而不是行本身. (18认同)
  • @McArthey不,它不会; 正在从现有行中的值创建新行.该行本身未添加到其他DataTable中. (12认同)
  • 虽然您的答案在技术上是正确的,但您的代码示例并未解决您的假设.@RageeshGr的答案处理所有假设,恕我直言写得更简洁,不易出错. (10认同)
  • @DawoodAbbasi有关`DataTable.Clone`方法的MSDN文档,请参阅MSDN文档:http://msdn.microsoft.com/en-us/library/system.data.datatable.clone.aspx (4认同)
  • @DawoodAbbasi正如我在原始答案中所说,"dataTable1和dataTable2具有相同的数量,类型和列顺序".如果您获得该异常,则表格的列数不能相同. (2认同)

小智 90

将指定的行从表复制到另一个

// here dttablenew is a new Table  and dttableOld is table Which having the data 

dttableNew  = dttableOld.Clone();  

foreach (DataRow drtableOld in dttableOld.Rows)
{
   if (/*put some Condition */)
   {
      dtTableNew.ImportRow(drtableOld);
   }
}
Run Code Online (Sandbox Code Playgroud)

  • @Sam关于你的问题,克隆是复制表结构,如果你的表已经是相同的数据类型,那么你不需要它。 (2认同)

小智 18

试试这个

    String matchString="ID0001"//assuming we have to find rows having key=ID0001
    DataTable dtTarget = new DataTable();
    dtTarget = dtSource.Clone();
    DataRow[] rowsToCopy;
    rowsToCopy = dtSource.Select("key='" + matchString + "'");
    foreach (DataRow temp in rowsToCopy)
    {
        dtTarget.ImportRow(temp);
    }
Run Code Online (Sandbox Code Playgroud)


Est*_*vez 14

看看这个,你可能会喜欢它(以前请将table1克隆到table2):

table1.AsEnumerable().Take(recodCount).CopyToDataTable(table2,LoadOption.OverwriteChanges);
Run Code Online (Sandbox Code Playgroud)

要么:

table1.AsEnumerable().Where ( yourcondition  ) .CopyToDataTable(table2,LoadOption.OverwriteChanges);
Run Code Online (Sandbox Code Playgroud)


mir*_*ger 12

受支持:4,3.5 SP1,您现在可以只调用该对象上的方法.

DataTable dataTable2 = dataTable1.Copy()
Run Code Online (Sandbox Code Playgroud)

  • 从技术上讲,这将创建数据表的副本。尽管问题中没有明确说明,但dataTable2可能已经存在,并且其中有其他行我们不想丢失。同样,该问题专门指出“特定行”,而这仅处理所有行。 (2认同)

Wil*_*eng 6

我创建了一个简单的方法来解决这个问题

 DataTable newTable = oldtable.Clone();    
 for (int i = 0; i < oldtable.Rows.Count; i++)
 {
   DataRow drNew = newTable.NewRow();    
   drNew.ItemArray = oldtable.Rows[i].ItemArray;    
   newTable.Rows.Add(drNew);   
 } 
Run Code Online (Sandbox Code Playgroud)


小智 5

由于其他职位,这是我能得到的最短的时间:

DataTable destTable = sourceTable.Clone();
sourceTable.AsEnumerable().Where(row => /* condition */ ).ToList().ForEach(row => destTable.ImportRow(row));
Run Code Online (Sandbox Code Playgroud)