关于linq到对象,如果我使用.Where(x => x ....),然后直接使用.SkipWhile(x => x ...),这样做会导致性能下降,因为我要检查收集两次?
我是否应该找到一种方法将所有内容放在Where子句或SkipWhile子句中?
最佳答案
使用Where和SkipWhile不会导致“遍历集合两次”。 LINQ to Objects在拉模型上工作。枚举组合查询时,SkipWhile将开始向其来源询问元素。它的来源是位置,因此这将导致位置开始依次向其来源询问元素。因此,SkipWhile将看到所有通过Where子句的元素,但是它将随着它们的前进而获取。结果是LINQ对原始集合进行了遍历,仅返回同时通过Where和SkipWhile过滤器的元素,而这仅涉及一次对集合的传递。
由于涉及两个迭代器,因此效率可能会微不足道,但这不太可能是很重要的。您应该编写清晰的代码(如您目前所做的那样),如果您怀疑清晰的版本导致性能问题,请采取措施以确保性能,然后再尝试合并这些子句。
关于c# - 结合LINQ语句以提高效率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2188242/