我的控制器中有以下 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()
the Select()
方法变得不可用。这同样适用于return PartialView(tickets.ToList())
.
我对使用异步还很陌生,但在了解它的优点后,我一直在将常规 ActionResult 方法与异步方法进行转换。到目前为止,使用更简单的基于 LINQ 的查询一切进展顺利。然而,对于这个 ActionResult 方法,查询有点更高级,并且实现它的语法/方式似乎有所不同。
任何帮助我走向正确方向的帮助将不胜感激!
分为两个语句:
var tickets0 = await (from ...).ToListAsync();
var tickets = tickets0.Select(...);
The .ToListAsync()
返回一个Task
,所以它不接受.Select
扩展方法,这将需要一些IEnumerable
。只有当你await
该任务,您将得到List
.
另一种方法(IMO 可读性较差)是:
var tickets = (await (from ...).ToListAsync()).Select(...);
请注意await 子句周围的额外(),这意味着Select 将处理等待代码的结果,而不是Task。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)