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



这是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(如何为PLINQ 构建带表达式树的动态查询

对于我的场景,我没有找到一个很好的解决方案来动态地将AsParallel((与我的linq查询连接起来。请分享我的知识,以实现我的目标。感谢

只需创建两个执行分支,其中一个使用AsParallel()

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

老实说,我认为这是不可能的。LINQ和PLINQ具有不同的运算符。LINQ运算符在IEnumerable<T>s上操作,而PLINQ运算符在ParallelQuery<T>s上操作。因此,尽管查询的两个版本(有和没有AsParallel(看起来完全相同,但它们从根本上来说是两个完全不同的查询。

最新更新