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