[英]PLINQ AsParallel error with datatable
我正在尝试将AsParallel
与数据表一起使用
using System.Linq;
var row = from r0w1 in dt.AsEnumerable().AsParallel()
join r0w2 in curdt.AsEnumerable().AsParallel()
on r0w1.Field<string>("B") equals r0w2.Field<string>("cr_B")
join r0w3 in tbmdt.AsEnumerable().AsParallel()
on r0w1.Field<string>("B") equals r0w3.Field<string>("tb_B") into ps
from r0w3 in ps.DefaultIfEmpty()
select new string[] { serial_number++.ToString() }
.Concat(r0w1.ItemArray.Concat
(r0w2 != null ? r0w2.ItemArray.Skip(1) : new object[] { "", "", "", "" })
.Concat(r0w3 != null ? r0w3.ItemArray.Skip(1) : new object[] { "", "", "", "" })).ToArray();
但是我在这里出错
system.data.enumerablerowcollection<system.data.datarow> does not contain a definition for 'Asparallel'
我正在使用Visual Studio2008。是否需要任何额外的库?
在内部语句中使用AsParallel的坏主意。 您不会加快数据库查询的速度。
最后,如果您需要操作收集:
var row = from r0w1 in dt
join r0w2 in curdt
on r0w1.Field<string>("B") equals r0w2.Field<string>("cr_B")
join r0w3 in tbmdt.AsEnumerable().AsParallel()
on r0w1.Field<string>("B") equals r0w3.Field<string>("tb_B") into ps
from r0w3 in ps.DefaultIfEmpty()
select new string[] { serial_number++.ToString() }
.Concat(r0w1.ItemArray.Concat
(r0w2 != null ? r0w2.ItemArray.Skip(1) : new object[] { "", "", "", "" })
.Concat(r0w3 != null ? r0w3.ItemArray.Skip(1) : new object[] { "", "", "", "" })).AsParallel();
您不能在DataRow
类上使用AsParallel
(或据我所知的任何linq扩展方法)。 不过,您可以在DataTable
上使用它,然后仅使用DataTable.Rows
。
同样,使用AsParallel
并不会真正执行任何操作,仅当需要在不需要顺序或不需要中间结果的情况下同时查询集合的不同元素时才使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.