viernes, 7 de diciembre de 2012

GROUP BY LINQ TO OBJECT II

Buenas , en esta ocasion veremos otro ejemplo como realizar un group by con linq , lo realize por un requerimiento personalizado, espero les ayude,

//Pre Linq
                for (int i = 1; i < _xCadenaValoresListaPrecios.Length - 1; i++)
                {
                    _xArrayProductoUnidad = _xCadenaValoresListaPrecios[i].Split(_xCaracter[1]);
                    _xFiltroValorProductoUnidad = _xArrayProductoUnidad[0].Split(_xCaracter[0]);

                    if (filtroEscala == _xFiltroValorProductoUnidad[0])
                    {

                        oListaString.Add(_xFiltroValorProductoUnidad[1].ToString() + "|" + _xFiltroValorProductoUnidad[2].ToString());
                    }
                }

                //Realizamos un Group By con Linq
                var oLinqGroupBy = oListaString.GroupBy(item => item)
                                     .Select(group => new
                                     {
                                         group.Key,
                                         Count = group.Count()
                                     });

                #region Escala

                foreach (var oString in oLinqGroupBy)
                {

                    CatalogoProductoUnidad oCatalogoProductoUnidad = (CatalogoProductoUnidad)itemCatalogoProducto.CrearObjeto("CatalogoProductoUnidad");
                    oCatalogoProductoUnidad.PrecioPorActualizar = true;
                    string[] _xArrayValoresUnidad;

                    _xArrayValoresUnidad = oString.Key.Split('|');

                    if (_xArrayValoresUnidad[1].Equals("1")) _xArrayValoresUnidad[1] = "true";
                    if (_xArrayValoresUnidad[1].Equals("0")) _xArrayValoresUnidad[1] = "false";

                    oCatalogoProductoUnidad.ProductoUnidad = (ProductoUnidad)XMLHelper.CargarxCampoUnico("ProductoUnidad", "Abreviacion", _xArrayValoresUnidad[0].ToString());
                    oCatalogoProductoUnidad.UnidadPorDefectoEnVenta = Convert.ToBoolean(_xArrayValoresUnidad[1]);


                    string[] _xArrayListaPrecios;
                    string[] _xFiltroValor;

                    for (int j = 1; j < _xCadenaValoresListaPrecios.Length - 1; j++)
                    {
                        CatalogoProductoEscala oCatalogoProductoEscala = (CatalogoProductoEscala)oCatalogoProductoUnidad.CrearObjeto("CatalogoProductoEscala");

                        _xArrayListaPrecios = _xCadenaValoresListaPrecios[j].Split(_xCaracter[1]);
                        _xFiltroValor = _xArrayListaPrecios[0].Split(_xCaracter[0]);

                        //Si encuentra productos iguales obtiene sus escalas
                        if (filtroEscala == _xFiltroValor[0] && _xFiltroValor[1] == _xArrayValoresUnidad[0].ToString())
                        {
                            oCatalogoProductoEscala.Desde = Convert.ToInt32(_xFiltroValor[3]); //Desde
                            oCatalogoProductoEscala.Hasta = Convert.ToInt32(_xFiltroValor[4]); //Hasta
                            oCatalogoProductoEscala.PrecioConImpuesto = Convert.ToDecimal(_xFiltroValor[5]); //PrecioConImpuesto
                            oCatalogoProductoEscala.PrecioSinImpuesto = Convert.ToDecimal(_xFiltroValor[6]); //PrecioSinImpuesto
                            oCatalogoProductoEscala.MargenGanancia = Convert.ToDecimal(_xFiltroValor[7]); //MargenGanancia
                            oCatalogoProductoEscala.PorcentajeMargenGanancia = Convert.ToDecimal(_xFiltroValor[8]); //PorcentajeMargenGanancia
                            oCatalogoProductoEscala.PorcentajeDescuentoA = Convert.ToDecimal(_xFiltroValor[9]); //PorcentajeDescuentoA
                            oCatalogoProductoEscala.PorcentajeDescuentoB = Convert.ToDecimal(_xFiltroValor[10]); //PorcentajeDescuentoB
                            oCatalogoProductoEscala.MontoDescuentoA = Convert.ToDecimal(_xFiltroValor[11]); //MontoDescuentoA
                            oCatalogoProductoEscala.MontoDescuentoB = Convert.ToDecimal(_xFiltroValor[12]); //MontoDescuentoB
                            oCatalogoProductoEscala.PrecioEspecialConImpuesto = Convert.ToDecimal(_xFiltroValor[13]); //PrecioEspecialConImpuesto
                            oCatalogoProductoEscala.CostoProducto = oCatalogoProductoEscala.CatalogoProductoUnidad.CatalogoProducto.ProductoServicio.CostoPromedio;
                            oCatalogoProductoUnidad.CatalogoProductoEscala.Agregar(oCatalogoProductoEscala);
                        }                      
                    }

                    //itemCatalogoProducto.CatalogoProductoUnidad.Agregar(oCatalogoProductoUnidad, oCatalogoProductoUnidad.ProductoUnidad.ID);

                    itemCatalogoProducto.CatalogoProductoUnidad.Agregar(oCatalogoProductoUnidad);

                    //}
               


Saludos


No hay comentarios:

Publicar un comentario