我有一个ViewComponent
,以及DTO
和ViewModel
类。我想将ViewModels
的列表传递给视图,但由于async/await
我无法在一行中执行此操作:
List<PageVM> pages = await _context.Pages.ToArray().Where(x => x.Slug != "home").OrderBy(x => x.Sorting).Select(x => new PageVM(x)).ToList();
我可以在更多行中这样做:
List<PageVM> pages = new List<PageVM>();
List<PageDTO> dto = await _context.Pages.Where(x => x.Slug != "home").ToListAsync();
foreach (var item in dto)
{
pages.Add(new PageVM(item));
}
但是可以修改一行,以便与await
一起使用吗?
答案 0 :(得分:1)
是的,它是;请注意括号:
var pages = (await _context.Pages.Where(x => x.Slug != "home").ToListAsync()).Select(x => new PageVM(x)).ToList();
但是,这相当于以下两个陈述:
var dtos = await _context.Pages.Where(x => x.Slug != "home").ToListAsync();
var pages = dtos.Select(x => new PageVM(x)).ToList();
哪个IMO更容易阅读。
答案 1 :(得分:0)
是的,你需要用括号包装等待的表达式。 这样的事情应该做。
List<PageVM> pages = (await _context.Pages.Where(x => x.Slug != "home").ToListAsync())
.Select(item => new PageVM(item)).ToList();