asparallel plinq vs linq

sye*_*ash 3 c# linq asp.net

我有一个代码块

var result = db.ProductReceives.Where(x => x.CustomerName.ToLower().Contains(searchTxt)).ToList();
Run Code Online (Sandbox Code Playgroud)

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

 var result = db.ProductReceives.AsParallel().Where(x => x.CustomerName.ToLower().Contains(searchTxt)).ToList();
Run Code Online (Sandbox Code Playgroud)

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

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

Luc*_*ski 6

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

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

  • 第二个将:

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

    很多比第一个解决方案慢.

你得到的是NullReferenceException因为其中一行有一个NULL CustomerName.所以你最终打电话了((string)null).ToLower().

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