首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >平行plinq对linq

平行plinq对linq
EN

Stack Overflow用户
提问于 2015-10-10 10:02:20
回答 2查看 415关注 0票数 3

我有个代码块

代码语言:javascript
复制
var result = db.ProductReceives.Where(x => x.CustomerName.ToLower().Contains(searchTxt)).ToList();

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

代码语言:javascript
复制
 var result = db.ProductReceives.AsParallel().Where(x => x.CustomerName.ToLower().Contains(searchTxt)).ToList();

它显示了错误消息对象引用没有设置为对象的实例.

我想要执行查询AsParallel query.can某个帮助吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-10 10:26:07

如果按db的建议访问数据库,那么:

  • 非并行代码将被转换为SQL查询并由DBMS直接执行。 这太快了。特别是如果您在CustomerName上有一个索引,因为它只能扫描该索引(否则您将得到一个完整的表扫描,但它可能仍然足够快)。
  • 第二项将:
代码语言:javascript
复制
- _Download_ the whole `ProductReceives` table. All of it.
- It will then create an object for each row.
- Then it will feed these objects to your parallel check.

这将比第一个解决方案慢得多。

您将得到一个NullReferenceException,因为其中一行有一个NULL CustomerName。所以你最后打电话给((string)null).ToLower()

在第一种情况下,错误不会发生,因为DMBS会自行过滤掉这些错误。

票数 6
EN

Stack Overflow用户

发布于 2016-04-19 09:48:43

可能您应该在调用ToLower之前检查客户名称null或not。

代码语言:javascript
复制
db.Tv_ProductReceive.AsParallel().Where(i =>i.CustomerName != null && i.CustomerName.ToLower().Contains(searchTxt)).ToList();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33052728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档