La interfaz IQueryable
le permite definir partes de una consulta en un proveedor de LINQ remoto (generalmente contra una base de datos, pero no tiene que serlo) en varios pasos y con ejecución diferida.
E.g. su capa de base de datos podría definir alguna restricción (por ejemplo, basada en permisos, seguridad, lo que sea) agregando una cláusula .Where(x => x.......)
a su consulta. Pero esto no se ejecuta por el momento, p. usted es no recuperando 150'000 filas que coinciden con ese criterio.
En su lugar, se pasa de la interfaz IQueryable
al siguiente nivel, la capa de negocios, donde puede agregar requisitos adicionales y cláusulas donde su consulta - nuevamente, nada se ejecuta aún, tampoco está lanzando 80,000 de sus 150,000 filas recuperadas; solo está definiendo criterios de consulta adicionales.
Y la capa de interfaz de usuario podría hacer lo mismo, p. basado en la entrada del usuario en una forma o algo.
Lo mágico es que está pasando la interfaz IQueryable
a través de todas las capas, lo que le agrega críticas adicionales, pero no se ejecuta/evalúa hasta que realmente lo fuerce. Esto también significa que no está innecesariamente seleccionando y recuperando toneladas de datos que terminará descartando después.
No se puede hacer eso con una lista estática clásica; hay que elegir los datos, posiblemente descartando una gran cantidad de ellos más adelante en el proceso; después de todo, tiene una lista estática.
'IQueryable' es fundamentalmente diferente de' list' - ambos tienen sus usos. –