C# Language
Interfaz IQueryable
Buscar..
Traducir una consulta LINQ a una consulta SQL
Las interfaces IQueryable
e IQueryable<T>
permiten a los desarrolladores traducir una consulta LINQ (una consulta 'integrada en el idioma') a una fuente de datos específica, por ejemplo, una base de datos relacional. Tome esta consulta LINQ escrita en C #:
var query = from book in books
where book.Author == "Stephen King"
select book;
Si los books
variables son de un tipo que implementa IQueryable<Book>
, la consulta anterior se pasa al proveedor (establecido en la propiedad IQueryable.Provider
) en forma de árbol de expresión, una estructura de datos que refleja la estructura del código. .
El proveedor puede inspeccionar el árbol de expresiones en tiempo de ejecución para determinar:
- que hay un predicado para la propiedad
Author
de la claseBook
; - que el método de comparación utilizado es 'igual a' (
==
); - que el valor que debe igualar es
"Stephen King"
.
Con esta información, el proveedor puede traducir la consulta de C # a una consulta de SQL en tiempo de ejecución y pasar la consulta a una base de datos relacional para obtener solo los libros que coinciden con el predicado:
select *
from Books
where Author = 'Stephen King'
Se llama al proveedor cuando la variable de query
se itera sobre ( IEnumerable
implementa IQueryable
).
(El proveedor utilizado en este ejemplo requeriría algunos metadatos adicionales para saber qué tabla consultar y cómo hacer coincidir las propiedades de la clase C # con las columnas de la tabla, pero dichos metadatos están fuera del alcance de la interfaz IQueryable
).