Linq: Agrupar y hacer una operación con una colección de datos.


Linq ha venido a ser una de las cosas que mejor a creado Microsoft dentro del Framework .net una vez dominado es muy útil. A veces necesitamos agrupar colecciones y aparte realizar alguna operación con los grupos. Linq nos permite hacer esto de una manera sencilla y entendible desde el punto de vista de la definición del código. Ya que es muy parecido a un lenguaje de consulta de datos. sin necesidad de hacer ciclos y contadores para recorrer las colecciones.
La wikipedia nos dice algo asi : LINQ define operadores de consulta estándar que permiten a lenguajes habilitados con LINQ filtrar, enumerar y crear proyecciones de varios tipos de colecciones usando la misma sintaxis. Tales colecciones pueden incluir arreglos, clases enumerables, XML, conjuntos de datos desde bases de datos relacionales y orígenes de datos de terceros.
Lo que sigue … dejo un ejemplo sencillo de acuerdo a lo platicado:
Implementación.
01namespace LinqTip
02{
03    using System;
04    using System.Collections.Generic;
05    using System.Linq;
06 
07    class Program
08    {
09        static void Main(string[] args)
10        {
11            List<Tipos> elements = new List<Tipos>();
12            elements.Add(new Tipos { id = "1", name = "veracruz", type = "ventas", data = 1000 });
13            elements.Add(new Tipos { id = "1", name = "Mexico", type = "compras", data = 2000 });
14            elements.Add(new Tipos { id = "1", name = "Yucatan", type = "ventas", data = 3000 });
15            elements.Add(new Tipos { id = "1", name = "Chiapas", type = "compras", data = 4000 });
16 
17 
18            var grouplist = (from list in elements
19                            group  list by list.type into newgroup
20                            select new
21                            {
22                                groups = newgroup.Key,
23                                total = newgroup.Sum( s => s.data)
24                            });
25            foreach(var types in grouplist)
26                Console.WriteLine("type {0} , total = {1}",types.groups, types.total);
27 
28            Console.ReadLine();
29  
30        }
31    }
32}
Modelo:
01namespace LinqTip
02{
03    class Tipos
04    {
05        public string id;
06        public string name;
07        public string type;
08        public int data;
09    }
10}

No hay comentarios:

Publicar un comentario