【问题标题】:List<order>' does not contain a definition for 'GetAwaiter'List<order>\' 不包含 \'GetAwaiter\' 的定义
【发布时间】:2023-01-09 00:08:56
【问题描述】:

我实际上面临一个奇怪的问题。我实际上是想通过查找特定的 id 返回数据列表。一切都应该有效,但我不明白为什么我会遇到这个烦人的错误。这是我的代码: 订单.cs

   public class order
    {
        public int  Id { get; set; }

        public int? Seid { get; set; }
        public AppUser Seuser { get; set; }

        public int? Reid { get; set; }
        public AppUser Reuser { get; set; }

        public string Status  { get; set; } 
    }

控制器

  [HttpGet]
        public async Task <ActionResult<IEnumerable<order>>>GetOrder()
        {
            var currentuserid = int.Parse(User.GetUserId());
            var r = await _orderRepository.GetOrders(currentuserid);
            if(r!=null)
            {
                return  Ok(r); 
            }
            return BadRequest();
        }

订单库

public async Task<IEnumerable<order>> GetOrders(int id)
 {
   return await _context.Orders.Where(x => x.Seid == id).ToList(); //here mainly found error when added await
 }

错误

'List<order>' does not contain a definition for 'GetAwaiter' and no accessible extension method 'GetAwaiter' accepting a first argument of type 'List<order>' could be found (are you missing a using directive or an assembly reference?) [API]csharp(CS1061)

当我将 await 删除到这行代码时:- return await _context.Orders.Where(x =&gt; x.Seid == id).ToList(); 然后错误消失了。但是当我运行我的应用程序时,我发现这个 await 案例有一个不同的错误。我是一个绝对的初学者。我如何解决这个问题。

【问题讨论】:

  • 如果保留 await 并删除 .ToList() 会怎样?
  • 旁注,研究 Lists、IEnumerable 和 IQueryable 之间的区别是一件好事。
  • @gunr2171 保持等待并删除 .Tolist() 后出现同样的错误
  • ToList -> ToListAsync
  • 新错误:- IQueryable&lt;order&gt;' does not contain a definition for 'ToListAsync' and no accessible extension method 'ToListAsync'

标签: c# asp.net-mvc asp.net-core async-await entity-framework-core


【解决方案1】:

您只能使用 await 定义 GetAwaiter() 的对象。 尝试删除 await,或使用 ToListAsync()

作为旁注,如果您的实现没有明确要求 List,我建议只返回一个 IEnumerable:

public async Task<IEnumerable<order>> GetOrders(int id)
 {
   return _context.Orders.Where(x => x.Seid == id);
 }

如果您需要返回 List,我建议更改方法签名以反映您将始终返回 List

public async Task<List<order>> GetOrders(int id)
 {
   return _context.Orders.Where(x => x.Seid == id).ToListAsync();
 }

【讨论】:

    【解决方案2】:

    尝试使用返回任务类型的接口,例如 IAsyncEnumerable:

    public async IAsyncEnumerable<List<order>> GetOrders(int id)
    {
        yield return await _context.Orders.Where(x => x.Seid == id).ToListAsync<order>();
    }
    

    【讨论】:

      猜你喜欢
      • 2017-11-20
      • 2017-04-08
      • 1970-01-01
      • 2012-08-04
      • 2017-04-20
      • 2018-08-21
      • 2016-12-15
      • 1970-01-01
      • 2020-08-21
      相关资源
      最近更新 更多