![](/img/trans.png)
[英]async/await "List<> does not contain a definition for 'GetAwaiter'"
[英]Method for getting a list async? 'List<ListDefinition>' does not contain a definition for 'ToListAsync'
我是asp.net核心編程的新手,它試圖制作一個簡單的列表應用程序,管理由ListDefinition定義的多個列表,每個列表包含多個ListItems。 我正在嘗試使用異步方法,該方法在獲取ListDefinition時效果很好( var currentList = await _context.ListDefinitions.Where(m => m.Id == id).FirstOrDefaultAsync();
)
但是,當嘗試獲取Listitems時,我找不到合適的方法來使其異步( var currentListItems = await currentList.ListItems.Distinct().ToListAsync();
不存在)
public class ListDefinition
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public int Id { get; set; }
public Guid CreatedByUserGuid { get; set; }
public string Name { get; set; }
public virtual ICollection<ListItem> ListItems { get; set; }
}
public class ListItem
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public int Id { get; set;
public string Description { get; set; }
public bool Done { get; set; }
public bool Important { get; set; }
}
public class CurrentListController : Controller
{
private readonly ApplicationDbContext _context;
public CurrentListController(ApplicationDbContext context)
{
_context = context;
}
// GET: CurrentList/5
public async Task<IActionResult> Index(int? id)
{
if (id == null)
{
return NotFound();
}
var currentList = await _context.ListDefinitions.Where(m => m.Id == id).FirstOrDefaultAsync();
var currentListItems = await currentList.ListItems.Distinct().ToListAsync();
if (currentListItems == null)
{
return NotFound();
}
return View(currentListItems);
}
(...)
錯誤信息:
'List<ListDefinition>' does not contain a definition for 'ToListAsync' and no extension method 'ToListAsync' accepting a first argument of type 'List<ListDefinition>'
您有兩種選擇:
不要利用延遲加載。 一鍵獲取所有數據:
var currentList = await _context.ListDefinitions.Where(m => m.Id == id)
.Include(ld => ld.ListItems).FirstOrDefaultAsync();
這意味着數據已經被加載,因此在下一個調用中使用async沒有任何好處:
var currentListItems = await currentList.ListItems.Distinct().ToList();
但是,由於您使用的是Distinct
(目的是什么?也許數據庫中不應存在重復項?),所以可能會加載過多的數據。
因為您實際上並不使用當前列表,所以可以簡單地加載以下項目:
var currentListItems = _context.ListItems
.Where(li => li.ListDefinitionId == id)
.Distinct().ToListAsync();
當然,這確實意味着您需要在ListItem
上定義外鍵,以與public virtual ICollection<ListItem> ListItems { get; set; }
匹配public virtual ICollection<ListItem> ListItems { get; set; }
public virtual ICollection<ListItem> ListItems { get; set; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.