C# 如何有条件地使用 AsParallel 或在运行时动态附加

C# How to use AsParallel conditionally or attach dynamically at runtime

这是一个通过 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>s 进行操作,而 PLINQ 运算符对 ParallelQuery<T>s 进行操作。因此,尽管查询的两个版本(有和没有 AsParallel)看起来完全相同,但它们从根本上说是两个完全不同的查询。

就做两个执行分支,其中一个使用AsParallel().

if (hugeAmountOfData)
{
    result = (
                 ...
                 query.AsParallel()
                 ...
             ).ToList();
}
else
{
    result = (
                 ...
                 query
                 ...
             ).ToList();
}