C#如何将一个DataTable中满足条件的数据导入另一个DataTable

时间:2022-09-23 08:13:46
如题

我只知道满足条件记录可以用Select()方法

那怎么导入或导出呢?

12 个解决方案

#1



for table 循环
   if row 符合条件
          然后把这个row 放了newtable 中
        

#2



/// <summary>
/// 执行DataTable中的查询返回新的DataTable
/// </summary>
/// <param name="dt">源数据DataTable</param>
/// <param name="condition">查询条件</param>
/// <returns></returns>
private DataTable GetNewDataTable(DataTable dt,string condition)
{
DataTable newdt = new DataTable();
newdt=dt.Clone();
DataRow[] dr = dt.Select(condition);
for(int i=0;i<dr.Length;i++)
{
newdt.ImportRow((DataRow)dr[i]);
}
return newdt;//返回的查询结果
}


#3


可是,如果数据量大的话,这样行吗?
.net这么强大,总该有个对应的方法吧。

#4


DataTable 有个Select() 方法
把筛选条件传进去,就返回 一个复合条件 DataRow 的集合
然后循环加到新 DataTable 里面就OK了
newtable.Rows.Add(dataRow[i].ItemArray);

#5


数据量大。在数据库处理完了再取出来不就行了

#6


看来,只能循环了,怀念 Append From...

#7


回5楼,是这样,这个表里放了各式各样的信息,需要分门别类的提取出来,然后作为控件的数据源,种类繁多,我不想一次次从数据库取数据。

#8


引用 4 楼  的回复:
DataTable 有个Select() 方法
把筛选条件传进去,就返回 一个复合条件 DataRow 的集合
然后循环加到新 DataTable 里面就OK了
newtable.Rows.Add(dataRow[i].ItemArray);

这样加不行,因为已有的Row已经属于另一个DataTable,先把DataTable.Clone一份(只有架构),然后用Import,语法我记不清,可以自己查查

#9


引用 8 楼  的回复:
这样加不行,因为已有的Row已经属于另一个DataTable,先把DataTable.Clone一份(只有架构……



直接加 DataRow 当然不行
加 DataRow的ItemArray还是可以的

#10


引用 2 楼  的回复:
C# code

/// <summary>
/// 执行DataTable中的查询返回新的DataTable
/// </summary>
/// <param name="dt">源数据DataTable</param>
/// <param name="condition">查询条件</param>
/// <returns></returns>
private DataTable Ge……

+

#11


datatable d =new datatable()
d.defaultview.rowfilter="c1='a'";
datatable c=d.defaultview.totable();

#12


11楼的方法可行,我试过了,正是需要的效果。

defaultview是DataView类型,rowfilter和totable都是DataView的方法

谢谢诸位!散分

另外:
2楼代码中:newdt.ImportRow((DataRow)dr[i]);
改为newdt.ImportRow(dr[i]);也行

4楼代码:newtable.Rows.Add(dataRow[i].ItemArray);
应该和2楼意思一样吧,我没试

#1



for table 循环
   if row 符合条件
          然后把这个row 放了newtable 中
        

#2



/// <summary>
/// 执行DataTable中的查询返回新的DataTable
/// </summary>
/// <param name="dt">源数据DataTable</param>
/// <param name="condition">查询条件</param>
/// <returns></returns>
private DataTable GetNewDataTable(DataTable dt,string condition)
{
DataTable newdt = new DataTable();
newdt=dt.Clone();
DataRow[] dr = dt.Select(condition);
for(int i=0;i<dr.Length;i++)
{
newdt.ImportRow((DataRow)dr[i]);
}
return newdt;//返回的查询结果
}


#3


可是,如果数据量大的话,这样行吗?
.net这么强大,总该有个对应的方法吧。

#4


DataTable 有个Select() 方法
把筛选条件传进去,就返回 一个复合条件 DataRow 的集合
然后循环加到新 DataTable 里面就OK了
newtable.Rows.Add(dataRow[i].ItemArray);

#5


数据量大。在数据库处理完了再取出来不就行了

#6


看来,只能循环了,怀念 Append From...

#7


回5楼,是这样,这个表里放了各式各样的信息,需要分门别类的提取出来,然后作为控件的数据源,种类繁多,我不想一次次从数据库取数据。

#8


引用 4 楼  的回复:
DataTable 有个Select() 方法
把筛选条件传进去,就返回 一个复合条件 DataRow 的集合
然后循环加到新 DataTable 里面就OK了
newtable.Rows.Add(dataRow[i].ItemArray);

这样加不行,因为已有的Row已经属于另一个DataTable,先把DataTable.Clone一份(只有架构),然后用Import,语法我记不清,可以自己查查

#9


引用 8 楼  的回复:
这样加不行,因为已有的Row已经属于另一个DataTable,先把DataTable.Clone一份(只有架构……



直接加 DataRow 当然不行
加 DataRow的ItemArray还是可以的

#10


引用 2 楼  的回复:
C# code

/// <summary>
/// 执行DataTable中的查询返回新的DataTable
/// </summary>
/// <param name="dt">源数据DataTable</param>
/// <param name="condition">查询条件</param>
/// <returns></returns>
private DataTable Ge……

+

#11


datatable d =new datatable()
d.defaultview.rowfilter="c1='a'";
datatable c=d.defaultview.totable();

#12


11楼的方法可行,我试过了,正是需要的效果。

defaultview是DataView类型,rowfilter和totable都是DataView的方法

谢谢诸位!散分

另外:
2楼代码中:newdt.ImportRow((DataRow)dr[i]);
改为newdt.ImportRow(dr[i]);也行

4楼代码:newtable.Rows.Add(dataRow[i].ItemArray);
应该和2楼意思一样吧,我没试