问题描述
这是通过 LINQ 连接两个数据表的示例
var JoinResult = (from p in dt.AsEnumerable()
join t in dtTax.AsEnumerable()
on p.Field<int>("Tax Id") equals t.Field<int>("Tax Id")
select new
{
ProductName = p.Field<string>("Product Name"),BrandName = p.Field<string>("Brand Name"),ProductCategory = t.Field<string>("Product Category"),TaxCharge = t.Field<int>("Charge")
}).ToList();
有时两个数据表中的数据量可能很大,而有时两个数据表中的数据量很小。当数据量很小时 AsParallel() 不需要,因为我知道 AsParallel() 在运行少量数据时会变慢,但是当数据量很大时 >AsParallel() 运行良好且速度快。
请告诉我如何动态地使用 AsParallel() 作为结果,当数据量很大时,同样的方式 AsParallel() 在数据量时不会被应用会很小。
How to build dynamic query with expression tree for PLINQ
我没有找到适合我的场景的好的解决方案来动态附加 AsParallel() 与我的 linq 查询。请分享知识以实现我的目标。谢谢
解决方法
老实说,我认为这是不可能的。 LINQ 和 PLINQ 具有不同的运算符。 LINQ 运算符在 IEnumerable<T>
上运行,而 PLINQ 运算符在 ParallelQuery<T>
上运行。因此,尽管查询的两个版本(带和不带 AsParallel
)看起来完全相同,但它们本质上是两个完全不同的查询。
只需创建两个执行分支,其中一个使用 AsParallel()
。
if (hugeAmountOfData)
{
result = (
...
query.AsParallel()
...
).ToList();
}
else
{
result = (
...
query
...
).ToList();
}