usar - programación linq con visual c#
linq a entidades vs linq a objetos-¿son lo mismo? (5)
Normalmente utilizo el término entity
para representar un objeto de datos de negocios y, en mi opinión, el linq to entities
y el linq to objects
eran los mismos. ¿No es eso correcto?
Eso definitivamente no es el caso.
LINQ-to-Objects es un conjunto de métodos de extensión en IEnumerable<T>
que le permiten realizar operaciones de consulta en memoria en secuencias arbitrarias de objetos. Los métodos aceptan delegados simples cuando sea necesario.
LINQ-to-Entities es un proveedor de LINQ que tiene un conjunto de métodos de extensión en IQueryable<T>
. Los métodos crean un árbol de expresiones (por lo que los delegados se pasan como Expression<>
s), y el proveedor creará una consulta SQL basada en su análisis de ese árbol de expresiones.
Como ejemplo, considere las siguientes consultas:
var query1 = mydb.MyEntity.Select(x => x.SomeProp).Where(x => x == "Prop");
var query2 = mydb.MyEntity.Select(x => x.SomeProp).AsEnumerable().Where(x => x == "Prop");
La primera consulta es construir un árbol de expresiones que consiste en una selección y un donde, con las dos lambdas consideradas realmente como LambdaExpression
s. El proveedor de LINQ-to-Entities lo traducirá a SQL que selecciona y filtra.
La segunda consulta inserta un AsEnumerable()
, lo que obligará al resto de la consulta a usar LINQ-to-Objects. En ese caso, el proveedor generará SQL basándose solo en la selección, devolverá todos esos registros de la base de datos y, a continuación, el filtrado se realizará en la memoria. Obviamente, eso va a ser mucho más lento.
L2o es para objetos en memoria. L2e consulta una base de datos.
Linq para entidades está destinado a ser utilizado con Entity Framework, mientras que Linq para objetos es para cualquier colección IEnumerable.
Más detalles:
Linq2Entities significa consultar datos a través del Entity Framework (Base de datos) de ADO.NET
Linq2Objects significa realizar consultas en datos de memoria (objetos locales).
Linq para objetos El término "LINQ to Objects" se refiere al uso de consultas LINQ con cualquier colección IEnumerable o IEnumerable directamente, sin el uso de un proveedor LINQ intermedio o API como LINQ to SQL o LINQ to XML. Puede usar LINQ para consultar cualquier colección enumerable como Lista, Array o Diccionario. La colección puede ser definida por el usuario o puede ser devuelta por una API de .NET Framework.
En un sentido básico, LINQ to Objects representa un nuevo enfoque para las colecciones. En la forma anterior, tenía que escribir complejos bucles foreach que especificaban cómo recuperar datos de una colección. En el enfoque LINQ, usted escribe un código declarativo que describe lo que quiere recuperar.
ref: http://msdn.microsoft.com/en-us/library/bb397919.aspx
Linq to Entity LINQ to Entities proporciona soporte para consultas integradas en el idioma (LINQ) que permite a los desarrolladores escribir consultas en el modelo conceptual de Entity Framework utilizando Visual Basic o Visual C #. Las consultas en Entity Framework están representadas por consultas en el árbol de comandos, que se ejecutan en el contexto del objeto. LINQ to Entities convierte las consultas de lenguaje integrado (LINQ) a las consultas del árbol de comandos, ejecuta las consultas en Entity Framework y devuelve objetos que pueden usarse tanto Entity Framework como LINQ. El siguiente es el proceso para crear y ejecutar una consulta de LINQ to Entities: Ref: http://msdn.microsoft.com/en-us/library/bb386964.aspx