简体   繁体   English

PLINQ AsParallel错误与数据表

[英]PLINQ AsParallel error with datatable

I am trying to use AsParallel with the 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();

But I am getting an error here 但是我在这里出错

system.data.enumerablerowcollection<system.data.datarow> does not contain a definition for 'Asparallel'

I am using visual studio 2008. Do I need any extra library for this ? 我正在使用Visual Studio2008。是否需要任何额外的库?

Bad idea to use AsParallel in inner statements. 在内部语句中使用AsParallel的坏主意。 You won't speed up DB querying. 您不会加快数据库查询的速度。

Put it in the end, if you need to operate collection: 最后,如果您需要操作收集:

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();

You can't use AsParallel (or any linq extension methods as far as I know) on the DataRow class. 您不能在DataRow类上使用AsParallel (或据我所知的任何linq扩展方法)。 You can use it on DataTable though, and then just use DataTable.Rows . 不过,您可以在DataTable上使用它,然后仅使用DataTable.Rows

Also using AsParallel won't really do anything in your case, only do it when you need to query on different elements of a collection simultaneously when order, or intermediate results aren't needed. 同样,使用AsParallel并不会真正执行任何操作,仅当需要在不需要顺序或不需要中间结果的情况下同时查询集合的不同元素时才使用它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM