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 Task
por 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.