当前位置: 首页 > 编程语言 > C#

并行运行简单的LINQ查询分享

时间:2023-04-11 11:52:24 C#

并行运行简单的LINQ查询我对LINQ和PLINQ还是个新手。在很多情况下,我通常只使用循环和List.BinarySearch,但我正在努力摆脱这种心态。publicclassStaff{//...publicboolMatches(stringsearchString){//...}}使用“普通”LINQ-抱歉,我不熟悉术语-我可以执行以下操作:varmatchedStaff=从sinallStaffwheres.Matches(searchString)selects;但我想并行执行此操作:varmatchedStaff=allStaff.AsParallel().Select(s=>s.Matches(searchString));当我检查matchedStaff的类型时,它是布尔列表,这不是我想要的。首先,我在这里做错了什么,其次,我如何从这个查询中返回一个列表?公共列表搜索(字符串搜索字符串){returnallStaff.AsParallel().Select(/*something*/).AsEnumerable();}返回IEnumerable,而不是列表。对于您的第一个问题,您应该将Select替换为Where:varmatchedStaff=allStaff.AsParallel().Where(s=>s.Matches(searchString));Select是投影运算符,而不是过滤器运算符,这就是为什么您会得到一个IEnumerable,该IEnumerable对应于输入序列中所有Staff对象到Matches方法调用返回的IEnumerable的投影。据我所知,您可以反对使用select,因为您似乎更熟悉select关键字是强制性的“查询语法”,而不是“lambda语法”(或“流畅语法”)的情况。..无论命名如何,仅此而已;)投影运算符(例如Select将序列中的元素作为输入,并以某种方式将此元素转换/投影到另一种类型的元素(此处投影为bool类型)。过滤运算符(例如Where将序列中的一个元素作为输入并输出输出序列中的一个元素,或者根本不基于谓词。至于你的第二个问题,AsEnumerable返回一个IEnumerable,正如它的名字所说;)如果你要得到一个列表,你应该调用ToList()(顾名思义;)):returnallStaff.AsParallel().Select(/*something*/).ToList();希望这可以帮助。无需放弃正常的LINQ语法来实现并行性。您可以重写原始查询:varmatchedStaff=fromsinallStaffwheres.Matches(searchString)selects;并行LINQ(“PLINQ”)版本将是:varmatchedStaff=fromsinallStaff.AsParallel()wheres.Matches(searchString)selects;要查看bool的来源,在编写时:varmatchedStaff=allStaff.AsParallel().Select(s=>s.Matches(searchString));这等效于以下查询语法:varmatchedStaff=fromsinallStaff.AsParallel()selects.Matches(searchString);正如darkey提到的,如果你想使用C#语法而不是查询语法,你应该使用Where():LINQ查询来分享所有内容,如果它对你有用并且你需要了解更多C#学习教程,我希望你更注意——varmatchedStaff=allStaff.AsParallel().Where(s=>s.Matches(searchString));本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: