数据表出现PLINQ AsParallel错误

本文关键字:AsParallel 错误 PLINQ 数据表 | 更新日期: 2023-09-27 18:27:43

我正在尝试将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'

我正在使用visualstudio2008。我需要额外的图书馆吗?

数据表出现PLINQ 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();

您不能在DataRow类上使用AsParallel(或据我所知的任何linq扩展方法)。不过,您可以在DataTable上使用它,然后只使用DataTable.Rows

此外,在您的情况下,使用AsParallel并不能真正起到任何作用,只有当您需要在不需要订单或中间结果的情况下同时查询集合的不同元素时,才可以这样做。