Saltar al contenido

Entity Framework ToListAsync() con Select()

Bienvenido a nuestra comunidad, aquí hallarás la respuesta que estabas buscando.

Solución:

Dividir en dos declaraciones:

var tickets0 = await (from ...).ToListAsync();

var tickets = tickets0.Select(...);

los .ToListAsync() devuelve un Taskpor lo que no acepta el .Select método de extensión, que necesitará algunos IEnumerable. solo cuando tu await esa tarea, obtendrás la List.

Otra forma (IMO menos legible) sería:

 var tickets = (await (from ...).ToListAsync()).Select(...);

Tenga en cuenta el extra ( ) alrededor de la cláusula await, lo que significa que Select funcionará en el resultado del código esperado, en lugar de Task.

Deberá esperar la consulta antes de llamar a select, pero dado que la consulta simplemente selecciona un modelo fuera de la consulta, puede crear el modelo dentro de la consulta y simplemente esperar eso.

public async Task NewTickets()

    // Show tickets for all divisions a agent is in

    var user = "abcdefg";
    var company = "company1";

    var tickets = await (from a in db2.Ticket
        join c in db2.Division on a.DivisionId equals c.DivisionId
        join dp in db2.DivisionParticipator on c.DivisionId equals dp.DivisionId
        where c.CompanyId == company.CompanyId && a.Status == "New" && dp.ApplicationUserId == user.Id
        select new Ticket
        
            Id = a.Id,
            DivisionId = a.DivisionId,
            Name = a.Name,
            TicketDate = a.TicketDate,
            NewPosts = a.NewPosts,
            Status = a.Status,
            Type = a.Type
         )
         .ToListAsync();

    return PartialView(tickets);

También necesitas importar System.Data.Entity en lugar de solo System.Linq. Eso puede parecer una tontería, pero terminé en esta pregunta debido a esto. ToList es parte de Linq pero los métodos asincrónicos son específicos de EF.

Comentarios y valoraciones

Si posees algún reparo o forma de desarrollar nuestro escrito puedes añadir una nota y con mucho gusto lo observaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *