如何在不使用循环的情况下将行集合(通过linq查询获取)分配给数据表?

时间:2011-06-14 10:41:23

标签: c# linq datatable assign

我认为数据表可能包含大量行。因此,我无法使用循环迭代和更新数据表。

我使用以下代码获取行集合

         from row in CSVDataTable.AsEnumerable()
         where CSVDataTable.Columns.Cast<DataColumn>().Any(col => !row.IsNull(col))
         select row;

请告诉我如何在不使用循环的情况下将上述代码的结果分配给数据表。

2 个答案:

答案 0 :(得分:4)

可以通过以下代码将Linq查询结果分配给数据表

           // Create a DataTable from Linq query.       

             IEnumerable<DataRow> query = from row in CSVDataTable.AsEnumerable()
                                            where CSVDataTable.Columns.Cast<DataColumn>().Any(col => !row.IsNull(col))
                                            select row; //returns IEnumerable<DataRow>

             DataTable CSVDataTableWithoutEmptyRow = query.CopyToDataTable<DataRow>();

有关详细信息,请参阅链接

http://msdn.microsoft.com/en-us/library/bb386921.aspx

答案 1 :(得分:1)

你正试图避免我认为不可避免的事情。

你有一个“懒惰”的查询,它会返回IEnumerable<DataRow>。无论您何时尝试访问它所代表的DataRow集合,都会枚举此查询。

唯一的区别是,如果您直接执行此操作,或DataTable的某些方法隐藏了该实现细节。

我会做以下事情:

DataTable table;
table.BeginLoadData();
foreach (DataRow row in query)
{
     table.ImportRow(row);
}
table.EndLoadData();