query - linq to datatable c# example
Cuál es la diferencia entre "LINQ to Entities", "LINQ to SQL" y "LINQ to Dataset" (3)
He estado trabajando durante bastante tiempo con LINQ. Sin embargo, sigue siendo un poco misterioso cuáles son las diferencias reales entre los sabores mencionados de LINQ.
La respuesta exitosa contendrá una breve diferenciación entre ellos. ¿Cuál es el objetivo principal de cada sabor, cuál es el beneficio, y hay un impacto en el rendimiento ...
PD. Sé que hay muchas fuentes de información por ahí, pero estoy buscando una especie de "hoja de referencia" que instruya a un novato dónde dirigirse para un objetivo específico.
LINQ es un conjunto amplio de tecnologías, que se basa en (por ejemplo) una sintaxis de comprensión de consultas, por ejemplo:
var qry = from x in source.Foo
where x.SomeProp == "abc"
select x.Bar;
que es mapeado por el compilador en código:
var qry = source.Foo.Where(x => x.SomeProp == "abc").Select(x => x.Bar);
y aquí comienza la verdadera magia. Tenga en cuenta que no hemos dicho qué Foo
está aquí, ¡y al compilador no le importa! Siempre que pueda resolver algún método adecuado llamado Where
que puede tomar una lambda, y el resultado de eso tiene algún método Select
que pueda aceptar la lambda, es feliz.
Ahora considere que el lambda se puede compilar en un método anónimo (delegado, para LINQ-to-Objects, que incluye LINQ-to-DataSet), o en un árbol de expresiones (un modelo de tiempo de ejecución que representa el lambda en un modelo de objetos) )
Para los datos en memoria (normalmente IEnumerable<T>
), simplemente ejecuta el delegado: fino y rápido. Pero para IQueryable<T>
la representación de objeto de la expresión (una LambdaExpression<...>
) puede separarla y aplicarla a cualquier ejemplo de "LINQ-a-algo".
Para bases de datos (LINQ-to-SQL, LINQ-to-Entities) esto puede significar escribir un TSQL, por ejemplo:
SELECT x.Bar
FROM [SomeTable] x
WHERE x.SomeProp = @p1
Pero podría (para ADO.NET Data Services, por ejemplo) significa escribir una consulta HTTP.
Ejecutar una consulta TSQL bien escrita que devuelve una pequeña cantidad de datos es más rápido que cargar una base de datos completa a través de la red y luego filtrar en el cliente. Sin embargo, ambos tienen escenarios ideales y escenarios erróneos.
El objetivo y el beneficio aquí es permitirle utilizar una única sintaxis comprobada estática para consultar una amplia gama de fuentes de datos y hacer que el código sea más expresivo (por ejemplo, el código "tradicional" para datos de grupo no es muy claro en términos de lo que está tratando de hacer, se pierde en la masa del código).
LINQ significa consulta integrada de lenguaje. Le permite usar el lenguaje de consulta "estilo SQL" directamente dentro de C # para extraer información de las fuentes de datos.
- Esa fuente de datos podría ser una base de datos de servidor SQL, esto es Linq a SQL
- Esa fuente de datos podría ser un contexto de datos de los objetos del marco de la entidad - Linq para las entidades .
- Esa fuente de datos podría ser conjuntos de datos ADO.net - Linq to Dataset .
Esa fuente de datos también podría ser un archivo XML - Linq a XML .
O incluso solo una clase Collection de objetos simples: Linq to Objects .
LINQ describe la tecnología de consulta, el resto del nombre describe la fuente de los datos que se están consultando.
Para obtener un poco de experiencia extra:
Los conjuntos de datos son objetos de ADO.net donde los datos se cargan desde una base de datos en un .NET Dataset y Linq se puede usar para consultar esos datos después de que se carguen.
Con Linq a SQL usted define las clases .net que se asignan a la base de datos y Linq-to-SQL se encarga de cargar los datos de la base de datos del servidor SQL.
Y finalmente, el marco Entity es un sistema en el que puede definir una asignación de base de datos y objetos en XML, y luego puede usar Linq para consultar los datos que se cargan a través de esta asignación.
todos ellos son LINQ - Language Integrated Query - por lo que todos comparten muchas cosas en común. Todos estos "dialectos" básicamente le permiten hacer una selección de datos de estilo de consulta, de varias fuentes.
Linq-to-SQL es el primer intento de Microsoft de un ORM - Object Relational Mapper. Solo es compatible con SQL Server. Es una tecnología de mapeo para mapear las tablas de la base de datos de SQL Server a objetos .NET.
Linq-to-Entities es la misma idea, pero utilizando Entity Framework en segundo plano, como ORM, también de Microsoft, pero compatible con múltiples bases de datos.
Linq-to-DataSets es LINQ, pero el uso va en contra de los DataSets ADO.NET 2.0 de "estilo antiguo" - en los tiempos previos a los ORM de Microsoft, todo lo que podía hacer con ADO.NET era devolver DataSets, DataTables, etc., y Linq -to-DataSets consulta esos almacenes de datos para datos. Entonces, en este caso, devolvería un DataTable o DataSets (espacio de nombres System.Data) desde un back-end de base de datos, y luego consultaría aquellos que usan la sintaxis LINQ.