3

我有数据表可能包含大量行的场景。结果,我无法使用循环迭代和更新数据表。

我正在使用以下代码来获取行集合,

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

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

4

2 回答 2

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

于 2011-06-14T12:26:09.933 回答
1

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

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

唯一的区别是您是否直接执行此操作或DataTable隐藏该实现细节的某种方法。

我会做以下事情:

DataTable table;
table.BeginLoadData();
foreach (DataRow row in query)
{
     table.ImportRow(row);
}
table.EndLoadData();
于 2011-06-14T10:48:54.373 回答