繁体   English   中英

PLINQ AsParallel错误与数据表

[英]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.

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