none
Devolver valor de tipo decimal en método async RRS feed

  • Pregunta

  • Hola

    Trabajo con EFCore 3.1 tengo un método async que devuelve un decimal 

    public async Task<decimal> SumIngreso(int operacion)
            {
                using (var context = new CatalogoInquilinoContext())
                {
                    var result = from mc in context.MovimientoCajas
                                 join o in context.Operaciones on mc.OperacionId equals o.OperacionId
                                 where o.OperacionStatus == OperacionCaja.Abrir && o.OperacionId == operacion
                                 select mc.Ingreso;
    
                    return await !result.AnyAsync() ? 0 : result.Sum();
                }
            }

    Me da el siguiente error: No se puede aplicar el operador de tipo ! 

    Mi variable result es de tipo IQueryable<decimal>


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    lunes, 20 de julio de 2020 19:32

Respuestas

  • hola

    Porque necesitas usar el AnyAsync() ? porque no directo

    public async Task<decimal> SumIngreso(int operacion)
    {
    	using (var context = new CatalogoInquilinoContext())
    	{
    		var result = await (from mc in context.MovimientoCajas
    				    join o in context.Operaciones on mc.OperacionId equals o.OperacionId
    					where o.OperacionStatus == OperacionCaja.Abrir && o.OperacionId == operacion
    				    select mc.Ingreso).SumAsync();
    
    		return result;
    	}
    }

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    lunes, 20 de julio de 2020 20:54

Todas las respuestas

  • Puede ser

    public async Task<decimal> SumIngreso(int operacion)
            {
                using (var context = new CatalogoInquilinoContext())
                {
                    var result = from mc in context.MovimientoCajas
                                 join o in context.Operaciones on mc.OperacionId equals o.OperacionId
                                 where o.OperacionStatus == OperacionCaja.Abrir && o.OperacionId == operacion
                                 select mc.Ingreso);
    
                    var salida = await result.AnyAsync();
                    if (!salida)
                        return Convert.ToDecimal(0);
                    else
                        return await result.SumAsync();
                }
            }

    Saludos!


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    lunes, 20 de julio de 2020 20:19
  • Hola Pedro Ávila, 

      

    Gracias por tu respuesta de nuevo. 

      

    Igualmente, si resuelves el problema que estás experimentando en tu entorno, te agradecería que compartieras la solución con la comunidad de MSDN. 

      

    Espero tu respuesta. 

      

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN. 

      

    Eric Ruiz

    ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    lunes, 20 de julio de 2020 20:24
    Moderador
  • return Convert.ToDecimal(0);

    Una observación: hay una forma mucho más eficiente de hacer esto en C#:

           return 0m;

    La "m" al final de un número indica que ese número es de tipo Decimal. No hace falta atravesar una función de conversión.

    lunes, 20 de julio de 2020 20:40
    Moderador
  • hola

    Porque necesitas usar el AnyAsync() ? porque no directo

    public async Task<decimal> SumIngreso(int operacion)
    {
    	using (var context = new CatalogoInquilinoContext())
    	{
    		var result = await (from mc in context.MovimientoCajas
    				    join o in context.Operaciones on mc.OperacionId equals o.OperacionId
    					where o.OperacionStatus == OperacionCaja.Abrir && o.OperacionId == operacion
    				    select mc.Ingreso).SumAsync();
    
    		return result;
    	}
    }

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    lunes, 20 de julio de 2020 20:54