¿Cuál es la diferencia entre "LINQ to entities", "LINQ to SQL" y "LINQ to Dataset"


He estado trabajando durante bastante tiempo con LINQ. Sin embargo, sigue siendo un poco un misterio cuáles son las diferencias reales entre los sabores mencionados de LINQ.

La respuesta acertada 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...

P.d. Sé que hay un montón de fuentes de información por ahí, pero estoy buscando una especie de "hoja de trucos" que instruye a un novato a dónde dirigirse para un objetivo específico.

Author: Michael Petrotta, 2010-03-15

3 answers

  • Todos ellos son Consultas integradas en lenguaje LINQ, por lo que todos comparten muchos puntos 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 crear un Mapeador Rel-Object-Relational. Solo es compatible con SQL Server. Es una tecnología de asignación para asignar tablas de bases de datos de SQL Server a objetos. NET.

  • Linq-to-Entities es la misma idea, pero usando Entity Framework en segundo plano, como el OR-de nuevo de Microsoft, pero soportando múltiples backends de bases de datos

  • Linq-to-DataSets es LINQ, pero usar is contra el "estilo antiguo" ADO.NET 2.0 DataSets-en los tiempos anteriores a Microsoft de Microsoft, todo lo que podía hacer con ADO.NET estaba devolviendo conjuntos de datos, DataTables, etc., y Linq-to-DataSets consulta esos almacenes de datos para obtener datos. Así que en este caso, devolverías un DataTable o DataSets (System.Espacio de nombres de datos) de una base de datos backend, y luego consultar a los que utilizan la sintaxis de LINQ

 97
Author: marc_s,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-14 21:26:40

LINQ es un amplio conjunto de tecnologías, basadas 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 lo que Foo está aquí - y al compilador no le importa! Siempre y cuando pueda resolver algún método adecuado llamado Where que pueda tomar una lambda, y el resultado de eso tenga algunos Select método que puede aceptar la lambda, es feliz.

Ahora considere que la lambda se puede compilar ya sea en un método anónimo (delegate, para LINQ-to-Objects, que incluye LINQ-to-DataSet), o en un árbol de expresiones (un modelo de tiempo de ejecución que representa la lambda en un modelo de objetos).

Para los datos en memoria (típicamente IEnumerable<T>), simplemente ejecuta el delegado-bien y rápido. Pero para IQueryable<T> la representación-objeto de la expresión (a LambdaExpression<...>) puede separarla y aplicarla a cualquier Ejemplo de "LINQ-to-Something".

Para bases de datos (LINQ-to-SQL, LINQ-to-Entities) esto podría significar escribir TSQL, por ejemplo:

SELECT x.Bar
FROM [SomeTable] x
WHERE x.SomeProp = @p1

Pero podría (para ADO.NET Servicios de datos, 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 claramente equivocados.

El objetivo y el beneficio aquí es permitirle usar una sola sintaxis comprobada estática para consultar una amplia gama de fuentes de datos, y hacer que el código sea más expresivo (el código"tradicional" para agrupar datos, por ejemplo, no es muy claro en términos de lo que está tratando de hacer, se pierde en la masa de código).

 36
Author: Marc Gravell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-13 17:15:28

LINQ significa language integrated query. Le permite utilizar el lenguaje de consulta" estilo SQL " directamente dentro de C# para extraer información de fuentes de datos.

  • Esa fuente de datos podría ser una base de datos SQL server-esto es Linq to SQL
  • Esa fuente de datos podría ser un contexto de datos de objetos de entity framework - Linq to entities.
  • Esa fuente de datos podría ser ADO.net conjuntos de datos - Linq to Dataset.

Esa fuente de datos podría también ser un archivo XML - Linq a XML.
O incluso solo una clase de colección 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 consultan.

Para un poco de fondo extra:

Los conjuntos de datos son ADO.net los objetos donde los datos se cargan desde una base de datos en un Dataset.net y Linq se pueden usar para consultar esos datos después de cargarlos.

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 de SQL server

Y finalmente el Entity framework es un sistema donde puede definir una base de datos y asignación de objetos en XML, y luego puede usar Linq para consultar los datos que se cargan a través de esta asignación.

 25
Author: Simon P Stevens,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-14 21:39:25