我正在研究手术的表现。我正在迭代集合中的一部分项目。我使用Linq查询过滤此集合。它基本上是这样的:
var filteredItems = items.Where(x => x.PropertyToFilterOn == filterValue);
foreach (var filteredItem in filteredItems)
{
// do something to the filtered item
}
如果我使用Select
代替Where
,我会做同样的事情。哪个更好用,有什么区别?
答案 0 :(得分:9)
Where和Select肯定没有达到同样的目的。
Where
根据谓词过滤可枚举项。调用IEnumerable<T>
上的位置IEnumerable<T>
的结果。
Select
是一个投影 - 它允许您映射枚举,例如,仅选择枚举类型的属性的子集,或者完全基于枚举类型的值构造不同的对象。 / p>
where和select都至少为O(n) - 因为必须访问枚举中的每个项目才能执行投影或过滤。
标准查询运算符的以下文档是一个很好的参考。
答案 1 :(得分:5)
Where
过滤器,Select
地图。两件完全不同的事情。
答案 2 :(得分:2)
比较理论中的背景代码如何工作:
// Where
foreach(var x in items)
{
if (x.PropertyToFilterOn == filterValue)
yield return x;
}
// Select
foreach (var x in items)
{
yield return selector(x);
}
请注意,性能差异取决于给定选择器委托的复杂程度。但正如其他人所说,它们有不同的用途。