Consultas en LINQ

En este post vamos a seguir checando como usar LINQ mediante consultas simples.

Crearemos un proyecto de consola en C# , crearemos una clase llamada Libros, en donde tenemos los siguientes atributos:

public class Libros
    {
        public string Titulo{ get; set; }
        public string Editorial { get; set; }
        public string Autor { get; set;}}

Crearemos una lista de libros con los atributos que definimos en nuestra clase:

public static List<Libros> libros = new List<Libros>
    {
     new Libros{Titulo="Indigo",Editorial="Microsoft Press",Autor="David Pallmann"},
     new Libros{Titulo="Threat Modeling",Editorial="Microsoft Profesional",Autor="Frank Swiderski"},
     new Libros{Titulo="MCP NET Framework",Editorial="Microsoft Press",Autor="Mike Snell"},
     new Libros{Titulo="XML WebServices",Editorial="Microsoft Profesional",Autor="Adam Freeman"},
     new Libros{Titulo="Developing ASP.NET 2.0",Editorial="Microsoft Press",Autor="Dominick Baier"}
    };

Añadimos en nuestro método principal la consulta LINQ, el cual tendré todos los libros cuya Editorial sea Microsoft Profesional.

var Consulta= from libro in libros
                     where libro.Editorial == "Microsoft Profesional"
                       select libro;

Concluimos ejecutando la consulta y mostrando los resultados en un ciclo:

foreach (Libros libro in Consulta)
        {
            Console.WriteLine("{0}, {1}, {2}.", libro.Titulo, libro.Editorial, libro.Autor);
        }
        Console.ReadLine();

Nuestro código completo sería el siguiente:

using System;
using System.Linq;
using System.Collections.Generic;

class ejemplo1
{
    public class Libros
    {
        public string Titulo{ get; set; }
        public string Editorial { get; set; }
        public string Autor { get; set;}
    }
    public static List<Libros> libros = new List<Libros>
    {
     new Libros{Titulo="Indigo",Editorial="Microsoft Press",Autor="David Pallmann"},
     new Libros{Titulo="Threat Modeling",Editorial="Microsoft Profesional",Autor="Frank Swiderski"},
     new Libros{Titulo="MCP NET Framework",Editorial="Microsoft Press",Autor="Mike Snell"},
     new Libros{Titulo="XML WebServices",Editorial="Microsoft Profesional",Autor="Adam Freeman"},
     new Libros{Titulo="Developing ASP.NET 2.0",Editorial="Microsoft Press",Autor="Dominick Baier"}
    };

    static void Main()
    {
       var Consulta= from libro in libros
                     where libro.Editorial == "Microsoft Profesional"
                       select libro;

       foreach (Libros libro in Consulta)
        {
            Console.WriteLine("{0}, {1}, {2}.", libro.Titulo, libro.Editorial, libro.Autor);
        }
        Console.ReadLine();

    }
}

El resultado sería:

04Linq

 

Como obtener una lista de directorios con LINQ

En este post explicare los sencillos pasos para obtener una lista de directorios y su información ocupando el Lenguaje de Consultas Integrado LINQ en Visual Studio 2008.

1.- Creamos un proyecto de Aplicación Windows Forms en VB

2.-Agregamos un DataGridView para visualizar los datos en la regilla.

02Linq

3.-Agregamos el siguiente código en el evento Load del Formulario.

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim directorios = From directorio In My.Computer.FileSystem.GetDirectories("C:Program Files") _
                       Order By directorio _
                       Select directorio
        Dim InfoDirectorios = From directorio In directorios _
                           Select My.Computer.FileSystem.GetDirectoryInfo(directorio)

        Me.DataGridView1.DataSource = InfoDirectorios.ToList()

    End Sub
End Class

En donde tenemos la siguiente consulta que toma los nombres de los directorios que están en la ruta, en este caso c: y los ordena por directorio, además una segunda consulta que va a mostrar la información de tal directorio buscado,que después solo mostraremos en un DataGridView.

03Linq

URL: http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx

 

Introducción a LINQ

 En los últimos años ha aumentado la tecnología todo gracias a sistemas inteligentes y la evolución de los lenguajes de programación orientada a objetos. Esto quiere decir que la mayoría de los programadores ya estan familiarizados con los conceptos como clases, objetos,metodos, etc. Microsoft se enfoco en esta gran ventaja y propuso que es un reto poder reducir la complejidad del acceso a la información. Hemos venido utilizando tecnologías para poder tener acceso a nuestra información, los cuales son las bases de datos relacionales y XML.

Microsoft crea un proyecto llamado LINQ (Lenguaje Integrado de Consultas)”Language Integrated Query” en donde el enfoque general es facilitar las consultas a fuentes de información y no solo a los datos relacionales o XML, si no que esta vez  orientado a objetos.

Estas consultas integradas en los lenguajes .NET  (Vb,C#) van a definir un conjunto de operadores de consulta estandar el cual nos permiten hacer operaciones de recorrido, filtro y proyecciones en los datos o información que estemos manejando. 

¿Cuales son estos operadores de Consulta?

Si checamos el siguiente programa, en donde utilizamos un array de nombres y determinamos mediante una enumeración la consulta que queremos realizar, que sería saber todos los nombres que empiezen con la letra E. Tenemos que nuestros operadores serian :  from, where, orderby,select.

using System;
using System.Linq;
using System.Collections.Generic;
 
class ejemplo1

 

{

static void Main()

{ 
  string[] _nombres = { "Edison", "Daniel", "Edgar","Esperanza", "Alberto", "Jorge","Omar", "David" };

  IEnumerable<string> expresion = from nom in _nombres
                                  where nom.StartsWith("E")
                                  orderby nom
                                  select nom;
  
 foreach (string elemento in expresion)
Console.WriteLine(elemento);
Console.ReadLine();
} 

}

¿Cuales  son las características principales de LINQ?

 LINQ está construido enteramente sobre características de los lenguajes de propósito general, algunas de las cuales son nuevas en C# 3.0 y Visual Basic 9.0.

  •   Expresiones lambda y árboles de expresión

     Las expresiones lambda ofrecen a los desarrolladores una manera conveniente para poder escribir funciones que puedan ser pasadas como argumentos, hagamos de cuenta que las expresiones lambda son similares a los delegados del CLR.

     

    Retomando el mismo ejemplo anterior agregaremos expresiones lambda:

using System;
using System.Linq;
using System.Collections.Generic;

 

class ejemplo1

{

static void Main() { 

   string[] _nombres = { "Edison", "Daniel", "Edgar","Esperanza", "Alberto", "Jorge","Omar","David" };

  

Func<string, bool> condicion = nom => nom.StartsWith("E");

Func<string, string> orden = nom => nom;

Func<string, string> seleccion = nom => nom;

IEnumerable<string> expresion = _nombres.Where(condicion)

                                     .OrderBy(orden)

                                     .Select(seleccion);

 
foreach (string elemento in expresion)
Console.WriteLine(elemento);

Console.ReadLine(); }

}

    Checamos que las expresiones lambda tienen la ventaja de ofrecernos una sintaxis más directa y compacta para la escritura.

¿De qué se compone el proyecto de LINQ?

linq00

Podemos checar que el Proyecto LINQ se compone de C# 3.0, VB 9.0 y se aplica para Objetos, Base de datos Relacionales, XML.

Checaremos más ejemplos:

En este ejemplo lo que hacemos es tener un arreglo de tipo string en donde almaceno cierta cantidad de frutas y mi consulta se almacenara en un grupo de Frutas en donde clasificará a las frutas por la primera letra.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

class Program

{

static void Main(string[] args){

 

 string[] frutas = { "manzana", "pera", "sandia", "papaya", "piña", "mango","limon","guayaba","naranja" };

 

 var grupoFrutas = from f in frutas

                   

group f by f[0] into g

                    select new { PrimeraLetra = g.Key, frutas = g };

 

foreach (var g in grupoFrutas){

   Console.WriteLine("Las frutas que empiezan con la letra ‘{0}’:", g.PrimeraLetra);

             foreach (var f in g.frutas){

                   Console.WriteLine(f);     

     }  
 }   
Console.ReadLine();  
 }  
}

 

 

 Puedes checar más sobre LINQ con estos links:

LINQ Project. http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx

101 Ejemplos .- http://msdn2.microsoft.com/en-us/vcsharp/aa336746.aspx