繁体   English   中英

asparallel plinq vs linq

[英]asparallel plinq vs linq

我有一个代码块

var result = db.ProductReceives.Where(x => x.CustomerName.ToLower().Contains(searchTxt)).ToList();

工作正常,但当我写相同的查询

 var result = db.ProductReceives.AsParallel().Where(x => x.CustomerName.ToLower().Contains(searchTxt)).ToList();

它显示错误消息对象引用未设置为对象的实例。

我想执行查询AsParallel query.can一些帮助吗?

如果按db建议点击数据库,则:

  • 非并行代码将转换为SQL查询并由DBMS直接执行。
    很快 特别是如果你有一个CustomerName的索引,因为它只能扫描那个索引(否则你最终会得到一个全表扫描,但它可能仍然足够快)。

  • 第二个将:

    • 下载整个ProductReceives表。 所有的。
    • 然后它将为每一行创建一个对象。
    • 然后它会将这些对象提供给您的并行检查。

    是比第一个解决方案慢得多

您将获得NullReferenceException因为其中一行具有NULL CustomerName 所以你最终调用((string)null).ToLower()

在第一种情况下不会发生错误,因为DMBS将负责自行过滤。

也许你应该在调用ToLower之前检查客户名是否为null。

db.Tv_ProductReceive.AsParallel().Where(i =>i.CustomerName != null && i.CustomerName.ToLower().Contains(searchTxt)).ToList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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