none
Error consulta SUM en LINQ RRS feed

  • Pregunta

  • Me ha salido un error en linq al hacer una consulta con sum:

    "El valor Null no se puede asignar a un miembro con el tipo System.Int32 que es un tipo de valor que no acepta valores Null."

    mi consulta es int suma=bd.pagos.Where(P => P.fechaPago.Year == date.Year && P.fechaPago.Month == i).Select(P => P.montoPagado).Sum();

    He leido por ahi que si hago la siguiente modificacion:
    bd.pagos.Where(P => P.fechaPago.Year == date.Year && P.fechaPago.Month == i).Select(P => P.montoPagado).ToList<int>.Sum();

    Eso funciona, pero es la mejor forma de hacerlo? cual es la manera mas eficiente?



    gracias por responder

    miércoles, 20 de enero de 2016 22:46

Todas las respuestas

  • entiendo que el problema es que el campo en la db permite nulos, no ?

    si es asi podrias intentar no contarlo al sumar

     int suma = bd.pagos.Where(P => P.fechaPago.Year == date.Year && P.fechaPago.Month == i)
    					.Where(P => P.montoPagado != null)
    					.Sum(P => P.montoPagado);


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 20 de enero de 2016 23:44
  • Hola Leandro, perdon por no especificar mas datos, pero mis campos de la bd no permiten nulos, la tabla tiene 5 campos, de los cuales solo 1 acepta valores nulos, pero nada tiene que ver ése campo con la consulta...la consulta me trae un campo que no admite valores nulos, son INT y algunas filas tienen ceros
    En todo caso, no aceptando valores nulos, tambien probé el codigo que pusiste, pero  funciona a la primera vuelta del ciclo y luego, en la otra vuelta del ciclo for, se tilda y me arroja InvalidOperationException, con el texto de la excepcion que puse al principio


    byte inf = 1; byte sup = 7; for (byte i = 0; i < 4; i++) { if (i == 3) sup = supDayBisiestoOUltimaSemana; retorno[i, 0] = bd.pagos.Where(P => P.fechaPago.Year == date.Year

    && P.fechaPago.Month == date.Month && (P.fechaPago.Day >= inf

    &&P.fechaPago.Day <= sup) && P.montoPagado!=null) .Sum(P => P.montoPagado); retorno[i, 2] = bd.pagos.Where(P => P.fechaPago.Year == date.Year

    && P.fechaPago.Month == date.Month && (P.fechaPago.Day >= inf && P.fechaPago.Day <= sup)) .Select(P => P.montoPrestacion).ToList<int>().Sum(); retorno[i, 1] = retorno[i, 2] - retorno[i, 0]; inf = sup; sup += 7; }

    bd.dispose()


    jueves, 21 de enero de 2016 2:43