C# 带有datatable的PLINQ AsParallel错误
我正在尝试对datatable使用C# 带有datatable的PLINQ AsParallel错误,c#,linq,plinq,C#,Linq,Plinq,我正在尝试对datatable使用aspallel 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")
aspallel
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.Linq;
var row=从dt.AsEnumerable()中的r0w1开始
在curdt.AsEnumerable().AsParallel()中连接r0w2
关于r0w1.场(“B”)等于r0w2.场(“cr_B”)
在tbmdt.AsEnumerable().AsParallel()中加入r0w3
在r0w1上,字段(“B”)等于r0w3。字段(“tb_B”)到ps
从ps.DefaultIfEmpty()中的r0w3开始
选择新字符串[]{serial_number++.ToString()}
.Concat(r0w1.ItemArray.Concat
(r0w2!=null?r0w2.ItemArray.Skip(1):新对象[]{”“,”“,”“,”“})
.Concat(r0w3!=null?r0w3.ItemArray.Skip(1):新对象[]{“,”,“,”})).ToArray();
但我这里有个错误
system.data.enumerablerowcollection<system.data.datarow> does not contain a definition for 'Asparallel'
system.data.EnumerablerRowCollection不包含“Asparallel”的定义
我正在使用VisualStudio2008。我需要额外的库吗?在内部语句中使用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();
var行=从r0w1到dt
在curdt中加入r0w2
关于r0w1.场(“B”)等于r0w2.场(“cr_B”)
在tbmdt.AsEnumerable().AsParallel()中加入r0w3
在r0w1上,字段(“B”)等于r0w3。字段(“tb_B”)到ps
从ps.DefaultIfEmpty()中的r0w3开始
选择新字符串[]{serial_number++.ToString()}
.Concat(r0w1.ItemArray.Concat
(r0w2!=null?r0w2.ItemArray.Skip(1):新对象[]{”“,”“,”“,”“})
.Concat(r0w3!=null?r0w3.ItemArray.Skip(1):新对象[]{“,”,“,”})).AsParallel();
在内部语句中使用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();
var行=从r0w1到dt
在curdt中加入r0w2
关于r0w1.场(“B”)等于r0w2.场(“cr_B”)
在tbmdt.AsEnumerable().AsParallel()中加入r0w3
在r0w1上,字段(“B”)等于r0w3。字段(“tb_B”)到ps
从ps.DefaultIfEmpty()中的r0w3开始
选择新字符串[]{serial_number++.ToString()}
.Concat(r0w1.ItemArray.Concat
(r0w2!=null?r0w2.ItemArray.Skip(1):新对象[]{”“,”“,”“,”“})
.Concat(r0w3!=null?r0w3.ItemArray.Skip(1):新对象[]{“,”,“,”})).AsParallel();
您不能在DataRow
类上使用aspallel
(或据我所知的任何linq扩展方法)。您可以在DataTable
上使用它,然后只需使用DataTable.Rows
同样,在您的情况下,使用
aspallel
也不会真正起到任何作用,仅当您需要同时查询集合的不同元素时,才可以这样做,因为不需要顺序或中间结果。您不能在DataRow
类上使用aspallel
(或据我所知的任何linq扩展方法)。您可以在DataTable
上使用它,然后只需使用DataTable.Rows
另外,在您的情况下,使用
aspallel
也不会真正起到任何作用,仅当您需要在不需要订单或中间结果的情况下同时查询集合的不同元素时才可以使用。谢谢您的回复。正如我在问题中提到的,由于错误,我甚至不能使用aspallel
。谢谢你的回复。正如我在问题中提到的,由于错误,我甚至不能使用AsParallel
。