Al escribir una consulta LINQ con varias condiciones "y", ¿debo escribir una sola cláusula where
que contenga &&
o múltiples where
cláusulas, una para cada condición?¿Debo usar dos cláusulas "where" o "&&" en mi consulta LINQ?
static void Main(string[] args)
{
var ints = new List<int>(Enumerable.Range(-10, 20));
var positiveEvensA = from i in ints
where (i > 0) && ((i % 2) == 0)
select i;
var positiveEvensB = from i in ints
where i > 0
where (i % 2) == 0
select i;
System.Diagnostics.Debug.Assert(positiveEvensA.Count() ==
positiveEvensB.Count());
}
¿Hay alguna diferencia que no sea la preferencia personal o estilo de codificación (líneas largas, la legibilidad, etc.) entre positiveEvensA y positiveEvensB?
Una posible diferencia que viene a la mente es que los diferentes proveedores de LINQ pueden hacer frente mejor a múltiples where
s en lugar de una expresión más compleja; ¿Es esto cierto?
Con 2 "dónde" cláusulas, que sigue siendo sólo una única iteración con 2 llamadas de delegados por artículo - no 2 iteraciones como se reivindica. –
Marc, cuando digo dos iteraciones, debería haber sido más explícito. Con las cláusulas 2 where, construyes dos enumeradores separados: el primero crea un enumerador que se enumera por el segundo. Pero eso es bastante menor: no hace 2 bucles, solo enumera con enumeradores separados. –
Creo que 'Where' tiene algunas optimizaciones especiales para el caso multiple cláusula where. Aún así será más lento debido a las múltiples invocaciones de delegados. – CodesInChaos