我想使用新的Parallel.ForEach函数来遍历数据表并对每一行执行操作.我想转换下面的代码:
foreach(DataRow drow in dt.Rows) { ... Do Stuff ... }
对于这段代码:
System.Threading.Tasks.Parallel.ForEach(dt.Rows, drow => { ... Do Stuff ... });
当我运行新代码时,我收到错误:
无法从用法中推断出方法'System.Threading.Tasks.Parallel.ForEach(System.Collections.Generic.IEnumerable,System.Action)'的类型参数.尝试显式指定类型参数.
这个的正确语法是什么?
DataTable.Rows
返回DataRowCollection
只实现的IEnumerable
,而不是IEnumerable
.使用AsEnumerable()
扩展方法on DataTable
(from DataTableExtensions
)代替:
Parallel.ForEach(dt.AsEnumerable(), drow => { ... Do Stuff ... });
这比接受的答案要好,因为这不需要引用System.Data.DataSetExtensions:
Parallel.ForEach(dt.Rows.Cast(), dr =>
要将ForEach与非泛型集合一起使用,可以使用Cast扩展方法将集合转换为泛型集合,如本示例所示.
Parallel.ForEach()期望第一个参数是IEnumerable <>类型.DataTable.Rows不是,但您可以使用AsEnumerable()扩展方法将其转换为一个.尝试:
... Parallel.ForEach(dt.AsEnumerable(), drow => ...