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
Authorde 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 ).