¿Qué es LINQ? Sé que es para bases de datos, pero ¿qué hace?
¿Qué es LINQ? Sé que es para bases de datos, pero ¿qué hace?
Respuestas:
LINQ significa Language Integrated Query .
En lugar de escribir YAQL (Yet Another Query Language), los desarrolladores de lenguaje de Microsoft proporcionaron una forma de expresar consultas directamente en sus lenguajes (como C # y Visual Basic). Las técnicas para formar estas consultas no se basan en los detalles de implementación de la cosa que se consulta, por lo que puede escribir consultas válidas en muchos destinos (bases de datos, objetos en memoria, XML) prácticamente sin tener en cuenta la forma subyacente en que Se ejecutará la consulta.
Comencemos esta exploración con las partes que pertenecen a .NET Framework (3.5).
LINQ To Objects: examine System.Linq.Enumerable para métodos de consulta. Estos objetivos IEnumerable<T>
, permiten consultar cualquier colección en bucle tipificado de manera segura. Estas consultas se basan en métodos compilados de .NET, no en expresiones.
LINQ to Anything: examine System.Linq.Queryable para algunos métodos de consulta. Estos apuntan IQueryable<T>
, permitiendo la construcción de árboles de expresión que pueden ser traducidos por la implementación subyacente.
Árboles de expresión: examine el espacio de nombres System.Linq.Expressions . Este es el código como datos. En la práctica, debe estar al tanto de estas cosas, pero realmente no necesita escribir código contra estos tipos. Las características del lenguaje (como las expresiones lambda) pueden permitirle usar varias manos cortas para evitar tratar con estos tipos directamente.
LINQ To SQL: examine el espacio de nombres System.Data.Linq . Especialmente tenga en cuenta el DataContext
. Esta es una tecnología DataAccess creada por el equipo de C #. Simplemente funciona
LINQ To Entities: examine el espacio de nombres System.Data.Objects . Especialmente tenga en cuenta el ObjectContext
. Esta es una tecnología DataAccess creada por el equipo de ADO.NET. Es complejo, potente y más difícil de usar que LINQ To SQL.
LINQ To XML: examine el espacio de nombres System.Xml.Linq . Esencialmente, la gente no estaba satisfecha con el contenido System.Xml
. Entonces Microsoft lo reescribió y aprovechó la reescritura para introducir algunos métodos que facilitan el uso de LINQ To Objects contra XML.
Algunos buenos tipos de ayuda, como Func y Action . Estos tipos son delegados con soporte genérico. Atrás quedaron los días de declarar sus propios tipos de delegados personalizados (y no intercambiables).
Todo lo anterior es parte de .NET Framework y está disponible desde cualquier lenguaje .NET (VB.NET, C #, IronPython, COBOL .NET, etc.).
Ok, a las características del lenguaje. Voy a seguir con C #, ya que eso es lo que mejor sé. VB.NET también tuvo varias mejoras similares (y un par que C # no obtuvo: literales XML). Esta es una lista corta e incompleta.
Métodos de extensión: esto le permite "agregar" un método para escribir. El método es realmente un método estático al que se le pasa una instancia del tipo, y está restringido al contrato público del tipo, pero es muy útil para agregar métodos a tipos que no controla (cadena) o agregar (implementado completamente ) métodos auxiliares para las interfaces.
Sintaxis de comprensión de consultas: esto le permite escribir en una estructura similar a SQL. Todo esto se traduce a los métodos en System.Linq.Queryable o System.Linq.Enumerable (según el tipo de myCustomers). Es completamente opcional y puede usar LINQ bien sin él. Una ventaja de este estilo de declaración de consulta es que las variables de rango tienen un alcance: no es necesario volver a declararlas para cada cláusula.
IEnumerable<string> result =
from c in myCustomers
where c.Name.StartsWith("B")
select c.Name;
Expresiones de Lambda: esta es una abreviatura para especificar un método. El compilador de C # traducirá cada uno a un método anónimo o verdadero System.Linq.Expressions.Expression
. Realmente necesitas entender esto para usar bien Linq. Hay tres partes: una lista de parámetros, una flecha y un cuerpo de método.
IEnumerable<string> result = myCustomers
.Where(c => c.Name.StartsWith("B"))
.Select(c => c.Name);`
Tipos anónimos: a veces el compilador tiene suficiente información para crear un tipo para usted. Estos tipos no son realmente anónimos: el compilador los nombra cuando los crea. Pero esos nombres se hacen en tiempo de compilación, lo cual es demasiado tarde para que un desarrollador use ese nombre en tiempo de diseño.
myCustomers.Select(c => new
{
Name = c.Name;
Age = c.Age;
})
Tipos implícitos: a veces, el compilador tiene suficiente información de una inicialización que puede determinar el tipo por usted. Puede indicarle al compilador que lo haga utilizando la palabra clave var. Se requiere la escritura implícita para declarar variables para los tipos anónimos, ya que los programadores no pueden usar el nombre de un tipo anónimo .
// The compiler will determine that names is an IEnumerable<string>
var names = myCustomers.Select(c => c.Name);
LINQ (Consulta integrada en el idioma) puede referirse a:
Una biblioteca para la recopilación y la manipulación de iteradores que hace un uso extensivo de las funciones de orden superior como argumentos (System.Linq)
una biblioteca para pasar y manipular funciones simples como árboles de sintaxis abstracta (System.Linq.Expressions)
una extensión de sintaxis a varios lenguajes para proporcionar una sintaxis más parecida a SQL para procesar colecciones, una notación más compacta para funciones anónimas y un mecanismo para introducir funciones auxiliares estáticas que no se distinguen sintácticamente de las funciones miembro finales
una definición de interfaz a la que los proveedores de datos pueden conformarse para recibir la estructura de consulta y potencialmente realizar la optimización al respecto, u ocasionalmente los propios proveedores de datos compatibles
Los componentes se pueden usar de forma aislada o combinada.
En pocas palabras, LINQ (Language-Integrated Query) le permite escribir consultas directamente en su código. Esas consultas pueden estar en bases de datos relacionales, pero también en objetos de contenedor XML o en memoria, como matrices y listas. Hay más información disponible en la biblioteca de MSDN: http://msdn.microsoft.com/en-us/library/bb308959.aspx
Intentaré una respuesta simple: LINQ es una forma de consultar su base de datos (u otro almacén de datos, XML, etc.) utilizando un lenguaje de consulta que es similar a SQL pero que puede compilarse dentro de una aplicación .NET.
From Where Select, etc.
, es decir, debe escribirse de la forma en que realmente se forma el conjunto de resultados
LINQ significa Language Integrated Query , y es una forma de proporcionar un mecanismo de "consulta" de propósito general en el CLR.
En su nivel más básico, este consiste en un conjunto de métodos en IEnumerable <T>, por ejemplo, Seleccionar, Sumar, Dónde, que se pueden usar para restricciones, proyecciones, etc. [1]
Para llevarlo un poco más allá, LINQ también define un nuevo modelo de proveedor de LINQ que puede tomar un árbol de expresión y usarlo para ejecutar consultas "nativas" contra un origen de datos fuera del CLR, por ejemplo, LINQ to SQL, LINQ to XML, LINQ a NHibernate, etc.
C # y VB.NET también han definido una sintaxis de consulta que le permite escribir consultas fuertemente tipadas en línea (que se parece mucho a SQL), que el compilador luego traduce en llamadas IEnumerable <T> equivalentes.
Para mí, lo más interesante de LINQ es que todas las características de C # y VB.NET que se necesitaban para admitirlo son útiles por derecho propio. Se necesitaban métodos de extensión, tipos anónimos, expresiones lambda y tipeo implícito para admitir LINQ, pero tendemos a usar esas características fuera de un contexto LINQ puro.
[1] Esos son términos relacionales, los programadores funcionales probablemente preferirían Mapa, Reducir, Plegar, etc.
LINQ es una tecnología para extraer datos utilizando un idioma derivado del lenguaje de programación C #. Si bien debe mucho en diseño funcional a SQL, es fundamentalmente su propio lenguaje de consulta de datos. Opera en un amplio espectro de fuentes de datos (bases de datos SQL, representaciones en memoria, XML, etc.). LINQ-To-SQL, en particular, debe verse como un contraste con el uso tradicional de SQL incorporado que sufre de lo que a menudo se conoce como un "desajuste de impedancia" entre la programación SQL y la programación C # / VB.
Para una discusión de LINQ y sus limitaciones, es posible que desee echar un vistazo a esta pregunta relacionada: ¿LINQ to SQL no pierde el punto?
http://msdn.microsoft.com/en-us/netframework/aa904594.aspx
"El Proyecto LINQ es un nombre en clave para un conjunto de extensiones de .NET Framework que abarca operaciones de consulta, configuración y transformación integradas en el lenguaje. Extiende C # y Visual Basic con sintaxis en lenguaje nativo para consultas y proporciona bibliotecas de clases para aprovechar estas capacidades ".