Geeks With Blogs
Marcos.NET De la programación y otros cuentos

Decidí comenzar (y no serán raros los posts sobre programación) hablando de LINQ, que es un tema al que le había sacado la vuelta durante mucho tiempo porque me parecía algo complicado y no había visto la funcionalidad y valor agregado que nos ofrece a los desarrolladores. LINQ (Language Integrated Query) ofrece una especie de abstracción respecto a la fuente de datos de la que se obtiene la información y proporciona una estructura sintáctica consistente (similar al SQL) que se puede utilizar para realizar consultas sobre diferentes tipos de fuente de datos: Objetos .NET, DataSets, Objetos SQL y archivos XML.

LINQ a Objetos (System.Linq)

LINQ puede funcionar sobre cualquier objeto(colección) que implemente la interfaz IEnumerable, lo cual nos permite ejecutar sentencias de selección un cuanto complejas sobre éste.

int[] numarr = new int[] {0,4,2,6,3,8,3,1};   

              var result = from n in nums
             where n < 5
             orderby n
             select n;    foreach(int i in result)

    Console.WriteLine(i);

 

LINQ a DataSets (System.Linq)

LINQ permite hacer consultas sobre los datos almacenados en un DataSet(ADO.NET).  Es importante remarcar el uso del método AsEnumerable que es el que devuelve el objeto IEnumerable sobre el que se puede ejecutar la sentencia LINQ.

DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);

DataTable orders = ds.Tables["SalesOrderHeader"];

var query =
    from order in orders.AsEnumerable()
    where order.Field<bool>("OnlineOrderFlag") == true
    select new
    {
        SalesOrderID = order.Field<int>("SalesOrderID"),
        OrderDate = order.Field<DateTime>("OrderDate"),
        SalesOrderNumber = order.Field<string>("SalesOrderNumber")
    };

foreach (var onlineOrder in query)
{
    Console.WriteLine("Order ID: {0} Order date: {1:d} Order number: {2}",
        onlineOrder.SalesOrderID,
        onlineOrder.OrderDate,
        onlineOrder.SalesOrderNumber);
}


LINQ a SQL (System.Data.Linq)

Esta variante de LINQ es la que más me agradó ya que permite convertir una tablas, campos y SPs en clases, propiedades y métodos respectivamente. Así, tenemos acceso a los datos contenidos en una tabla a través de clases .NET que nos permiten manipular los datos de manera muy sencilla y aprovechando al máximo la funcionalidad provista por LINQ. La relación entre tablas está también contemplada a través de clases anidadas. Se hace uso de un objeto DataContext para obtener la información de la base de datos, por lo que éste se debe inicializar con la cadena de conexión de la misma.

DataContext db = new   DataContext("c:\\northwind\\northwnd.mdf");
Table<Customer> Customers = db.GetTable<Customer>();
var q =
   from c in Customers
   where c.City == "London"
   select c;
foreach (var cust in q)
   Console.WriteLine("id = {0}, City = {1}", cust.CustomerID, cust.City);

 

LINQ a XML (System.Xml.Linq)

LINQ provee una interfaz de programación muy sencilla para el acceso a datos desde fuentes XML. XElement, a pesar de ser el uno de los objetos de menor jerarquía en la estructura, es el de mayor importancia, ya que es el que permite la definición e interacción con los datos.

XElement root = XElement.Load("PurchaseOrder.xml");
IEnumerable<XElement> address =
    from el in root.Elements("Address")
    where (string)el.Attribute("Type") == "Billing"
    select el;
foreach (XElement el in address)
    Console.WriteLine(el);


Aunque los ejemplos aquí mostrados son sencillos, creo que dan una buena idea de la capacidad que tiene LINQ y, con un poco de suerte, les darán ganas de leer un poco más al respecto y (¿quién sabe?) usarlo en sus próximos proyectos :)

[http://msdn.microsoft.com/en-us/library/bb308961.aspx]

Happy coding!

Posted on Monday, May 18, 2009 8:13 PM | Back to top


Comments on this post: Jugando con LINQ

No comments posted yet.
Your comment:
 (will show your gravatar)


Copyright © José Marcos García Espinosa | Powered by: GeeksWithBlogs.net