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 clase Book ;
  • 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 ).



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow