Let decir que tengo¿Seleccionar seguido por Donde resulta en dos iteraciones sobre IEnumerable?
IEnumerable<int> list = new int[] { 1, 2, 3 };
List<int> filtered = list.Select(item => item * 10).Where(item => item < 20).ToList();
La pregunta es ¿Hay dos iteraciones o sólo uno.
En otras palabras, es que un rendimiento equivalente a:
IEnumerable<int> list = new int[] { 1, 2, 3 };
List<int> filtered = new List<int>();
foreach(int item in list) {
int newItem = item * 10;
if(newItem < 20)
filtered.Add(newItem);
}
Un pequeño nitpick: La pregunta está etiquetada como "linq-to-objects", por lo que no hay árboles de expresión implicados, solo iteración directa a través de la secuencia junto con invocaciones de delegado. – LukeH