【发布时间】:2019-01-12 00:34:52
【问题描述】:
我的控制器中有以下 ActionResult
public async Task<ActionResult> NewTickets()
{
// Show tickets for all divisions a agent is in
var user = "abcdefg";
var company = "company1";
var tickets = (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
{
Id = a.Id,
DivisionId = a.DivisionId,
Name = a.Name,
TicketDate = a.TicketDate,
NewPosts = a.NewPosts,
Status = a.Status,
Type = a.Type
})
.ToList().Select(x => new Ticket
{
Id = x.Id,
DivisionId = x.DivisionId,
Name = x.Name,
TicketDate = x.TicketDate,
NewPosts = x.NewPosts,
Status = x.Status,
Type = x.Type
});
return PartialView(tickets.ToList());
}
我想要实现的是运行这个异步,但是如果添加ToListAsync()before Select()Select() 方法将变得不可用。 return PartialView(tickets.ToList()) 也是如此。
我对使用 async 还很陌生,但阅读了它的优势,我一直在将常规 ActionResult 方法与 async 方法转换。到目前为止,使用更简单的基于 LINQ 的查询进展顺利。然而,对于这个 ActionResult 方法,查询更高级一些,实现它的语法/方式似乎有所不同。
任何帮助我朝正确的方向前进将不胜感激!
【问题讨论】:
-
ToListAsync将返回一个Task,而不是List,所以你不能Select覆盖它——你必须await ... .ToListAsync()然后选择它...不过,我确实想知道你为什么在那个时候ToListing。 -
您能否解释一下为什么在查询过程中需要
ToList?通常ToList、ToArray在查询结束时调用以保存枚举结果
标签: c# asp.net-mvc entity-framework linq