none
Actualizar valores de List y usando LINQ RRS feed

  • Pregunta

  • Buenas:

    Me gustaria que le echaran un vistazo a mi trozo de codigo, se que no es muy eficiente porque me meto en un for dentro de otro for, pero no se me ocurre otra manera de actualizar los datos de la lista. Los pasos que sigo son...

    1. Parto de una lista de Registros (int numero, float consumo, float facturado)
    2. Esta lista tiene la variable facturado a 0
    3. Los agrupo por numero y sumo el consumo
    4. la lista la convierto en array
    5. recorro el array con los datos facturados por telefono obtenidos de una consulta a la BBDD
    6. ....Necesito segun el telefono ponerle el facturado.
           
    if (lstRegistros == null || lstRegistros.Count == 0) return;
    
                var DatosAgrupadosYSumados = lstRegistros.GroupBy(x => x.Numero).Select(x => new {
                    Numero = x.Key,
                    Consumo = x.Sum(y => y.Consumo),
                    Facturado = x.Max(y => y.Facturado)                
                });
    
                var array = DatosAgrupadosYSumados.ToArray();
    
                DataSet ds;
                if(DAL.obtenerPrecioDatosMoviles(out ds))
                {
                    for(int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        for(int y = 0; y < array.Length; y++)
                        {
                            if(array[y].Numero == Int32.Parse(ds.Tables[0].Rows[0][i].ToString()))
                            {
                                array[y].Facturado = float.Parse(ds.Tables[0].Rows[1][i].ToString());
                            }
                        }
                    }                
                }
                            

    Lo que he puesto en negrita me dice que no puedo asignarle valor a la propiedad porque es solo de lectura.

    Gracias de antemano


    bagf


    • Editado Babenza miércoles, 30 de mayo de 2018 10:52
    miércoles, 30 de mayo de 2018 10:49

Respuestas

Todas las respuestas

  • Deleted
    miércoles, 30 de mayo de 2018 12:24
  • la lista con numero y consumo la obtengo de un fichero csv y luego hago una consulta a una bbdd sql y obtengo numero y factura, segun entiendo deberia de pasar a una lista los numero y facturas de la bbdd y luego juntar las listas??

    bagf

    miércoles, 30 de mayo de 2018 14:10
  • Deleted
    • Propuesto como respuesta Jorge TurradoMVP miércoles, 30 de mayo de 2018 19:10
    • Marcado como respuesta Babenza jueves, 31 de mayo de 2018 7:20
    miércoles, 30 de mayo de 2018 18:09
  • Hola Walter,

    podrias revisar el cruce?? es que no me devuelve resultados... lo tengo asi:

    DataSet ds;
                if(DAL.obtenerPrecioDatosMoviles(out ds))
                {
                    DataTable firstTable = ds.Tables[0];
                    var cruce = lstRegistros.GroupBy(x => x.Numero).Join(firstTable.AsEnumerable(), g => g.Key, f => f[0], (g, f) => new { Numero = g.Key, Consumo = g.Sum(c => c.Consumo), Facturado = f[1] });
                    dgwResultados.Columns.Add("Col1", "Telefono");
                    dgwResultados.Columns.Add("Col2", "Consumo Datos");
                    dgwResultados.Columns.Add("Col3", "Facturado");
    
                    foreach (var item in cruce)
                    {
                        this.dgwResultados.Rows.Add(item.Numero, item.Consumo, item.Facturado);
                    }
                    dgwResultados.Sort(dgwResultados.Columns[1], ListSortDirection.Descending);
                }


    bagf

    jueves, 31 de mayo de 2018 7:28
  • Deleted
    jueves, 31 de mayo de 2018 12:18