¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. C# 8 y Visual Studio 2019
  3. LINQ
Extrait - C# 8 y Visual Studio 2019 Los fundamentos del lenguaje
Extractos del libro
C# 8 y Visual Studio 2019 Los fundamentos del lenguaje
1 opinión
Volver a la página de compra del libro

LINQ

Presentación de LINQ

LINQ (Language Integrated Query) está constituido por un conjunto de funcionalidades incluidas en el framework .NET a partir de la versión 3.5. Este componente está formado, por una parte, por una biblioteca de clases que proveen capacidades de consulta y, por otra, por un juego de extensiones para el lenguaje C# que permiten utilizar palabras clave específicas para escribir consultas con una sintaxis similar a la de SQL. Esta integración implica un cambio apreciable: la validez de una consulta se verifica en tiempo de compilación.

La extensión del lenguaje es, de hecho, un elemento sintáctico que simplifica la escritura de las consultas, aunque las expresiones que utilizan la sintaxis LINQ se traducen en el compilador por llamadas convencionales. Es posible deducir que cualquier consulta LINQ puede escribirse con llamadas a métodos. De manera inversa no ocurre lo mismo, algunos métodos no tienen su equivalencia en la sintaxis LINQ. No existe, en particular, ninguna palabra clave que permita traducir el método FirstOrDefault en la extensión LINQ de C#.

La existencia de ambos tipos de sintaxis presenta la ventaja de que deja al desarrollador escoger cuál utilizar en base a la que le resulte más cómoda. Hay quien prefiere escribir, en efecto, consultas de manera fluida utilizando únicamente las palabras clave del lenguaje, otros, entre...

Sintaxis

Antes de detallar los distintos elementos de LINQ que pueden utilizarse para escribir consultas, vamos a estudiar un primer ejemplo que nos permitirá comprender mejor qué es LINQ y cómo se utiliza.

Los datos sobre los que trabajaremos a lo largo de este estudio sintáctico de LINQ se encuentran en la base de datos Northwind de Microsoft. Una parte de su contenido se ha extraído en tres archivos en formato de texto que se cargarán en memoria para formar tres colecciones de objetos. Esta etapa de carga se realiza mediante el siguiente código, que se puede adaptar para apuntar a la carpeta que contenga los archivos. Los archivos de datos están disponibles para su descarga en el sitio web del fabricante.

class Cliente  
{  
   public string Identificador { get; set; }  
   public string Nombre { get; set; }  
   public string Direccion { get; set; }  
   public string Ciudad { get; set; }  
   public string Pais { get; set; }  
  
   public List<ProductoPedido> ProductosPedidos { get; set; }  
}  
  
class ProductoPedido  
{  
   public int NumeroPedido { get; set; }  
  
   //Referencia del Cliente asociado al pedido  
   public string IdentificadorCliente { get; set; }  
   //Referencia del Comercial asociado al pedido  
   public int IdentificadorComercial { get; set; }  
  
   public DateTime FechaPedido { get; set; }  
   public string NombreProducto { get; set; }  
   public decimal PrecioUnitario { get; set; }  
   public int Cantidad { get; set; }  
}  
  
class Comercial  
{  
   public int Identificador { get; set; }  
   public string Apellidos { get; set; }  
   public string Nombre { get; set; }  
}  
  
class Program  
{  
   //Esta variable...

Entity Framework Core

Hemos visto cómo LINQ sabe manipular a la perfección los objetos y sus propiedades y que resulta una herramienta ideal para la manipulación de datos. No obstante, estas colecciones de datos tienen un inconveniente importante: cuando termina la ejecución de la aplicación, se pierden por completo. La solución más común para conservar estos datos de manera persistente consiste en utilizar una base de datos a la que se confía la tarea de salvaguardar de la información.

El objetivo de Entity Framework Core es realizar de vínculo entre los mundos del desarrollo .NET y las bases de datos con el concepto mapeo objeto-relacional

1. Principios del mapeo objeto-relacional

El modelo tradicional de manipulación de datos, tal como existe con ADO.NET, puede ser difícil de utilizar cuando aumenta el número de tablas o de columnas. Las lecturas y escrituras de datos requieren, en particular, tener cierto rigor en cuanto a la gestión de nombres y tipos de elementos. Para remediar este problema, ha aparecido una técnica de desarrollo de software para manipular los datos según el paradigma de la programación orientada a objetos: el mapeo objeto-relacional (a menudo abreviado como ORM: Object-Relational Mapping).

a. Principios básicos

La técnica del mapeo objeto-relacional proporciona un medio de actuar sobre los orígenes de los datos sin que sea necesario hacer juegos malabares entre el lenguaje de programación y el lenguaje de consultas, con toda la lógica de transformación que necesita el paso de datos de un mundo al otro.

Concretamente, el papel de Entity Framework Core es permitir la traducción de llamadas a métodos (sobre todo los métodos de la API LINQ) que operan con colecciones de objetos .NET en comandos que la base de datos pueda interpretar y ejecutar. Cuando se devuelven los datos, se convierten automáticamente en objetos directamente utilizables en el código de la aplicación.

images/chap09_01.png

Estas operaciones implican que se creen tipos .NET para representar la información guardada a nivel del origen de los datos.

De este modo, las acciones asociadas al origen de los datos se encapsulan en un objeto, simplificando los procesos y reduciendo los costes asociados al desarrollo de una solución lógica...