none
Error 'Task<List<object>>' does not contain a definition for 'Where' RRS feed

  • Pregunta

  • me sale el siguiente error 

    'Task<List<object>>' does not contain a definition for 'Where' and no accessible extension method 'Where' accepting a first argument of type    'Task<List<object>>'

    para llamar una lista y luego buscar por nombre 

    Institucion =  _ProductosRepository.GetInstitucionesByAutores(itemAutor.IdAutor);
    
    var institucionFiltrado = Institucion.Where(a => a.Institucion.Contains(itemAutor.Institucion));

    donde _ProductoRepository lo  tengo como un async tak<List<object>>

      public async Task<List<InstitucionesProductoViewModel>> GetInstitucionesByAutores(int id)
            {

    No entiendo porque si le quito el async Task al metodo funciona?

    Uso DotNet core 2.2

    jueves, 11 de febrero de 2021 17:40

Respuestas

  • No entiendo. ¿Qué tiene este método que ver con el otro? Este último que has puesto es "void", no devuelve un Task como el otro.

    EDITADO: Ahora que lo pienso, ¿no querrás decir que el método que contiene dentro el await has tenido que marcarlo como async para que te permita await? ¿Y entonces da un error a su vez en el llamante? Sí, es así, si quieres usar async/await tienes que propagar de la misma manera todas las llamadas hasta alcanzar el evento inicial. La alternativa es llamar al async poniendo al final .Result, en lugar de usar await. Pero entonces te cargas toda la utilidad del async y no vale para nada. Para hacer eso es mejor que desde el principio no uses el async y te evitas problemas.

    jueves, 11 de febrero de 2021 21:11

Todas las respuestas

  • Te falta el await:

    Institucion = await  _ProductosRepository.GetInstitucionesByAutores(itemAutor.IdAutor);

    El await va emparejado con async. Lo que hace es esperar a que se termine de ejecutar el Task y entonces te devuelve lo que hay dentro del Task, que es un List, y éste último sí que tiene un "Where" (si has incluido System.Linq).

    Obviamente esto implica cambial la declaración de la variable Institucion.

    jueves, 11 de febrero de 2021 18:47
  • Hola,

    Gracias por levantar tu consulta en 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.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    jueves, 11 de febrero de 2021 19:21
    Moderador
  • Te falta el await:

    Institucion = await  _ProductosRepository.GetInstitucionesByAutores(itemAutor.IdAutor);

    El await va emparejado con async. Lo que hace es esperar a que se termine de ejecutar el Task y entonces te devuelve lo que hay dentro del Task, que es un List, y éste último sí que tiene un "Where" (si has incluido System.Linq).

    Obviamente esto implica cambial la declaración de la variable Institucion.

    hola alberto me sigue sacando error colocando el metodo como

    public async void InsertProductoIntelectual(ProductosSaveViewModel productos)

    jueves, 11 de febrero de 2021 20:31
  • No entiendo. ¿Qué tiene este método que ver con el otro? Este último que has puesto es "void", no devuelve un Task como el otro.

    EDITADO: Ahora que lo pienso, ¿no querrás decir que el método que contiene dentro el await has tenido que marcarlo como async para que te permita await? ¿Y entonces da un error a su vez en el llamante? Sí, es así, si quieres usar async/await tienes que propagar de la misma manera todas las llamadas hasta alcanzar el evento inicial. La alternativa es llamar al async poniendo al final .Result, en lugar de usar await. Pero entonces te cargas toda la utilidad del async y no vale para nada. Para hacer eso es mejor que desde el principio no uses el async y te evitas problemas.

    jueves, 11 de febrero de 2021 21:11