首页 > 解决方案 > 我应该如何从我的控制器到我的界面进行异步调用

问题描述

我有一个界面:

 public IEnumerable<statisticsDaily> statsMonthly(string id, string dtFrom, string dtTo)
    {

        var rslt =  ( from d in db.statMonth
                    join s in db.masterData on d.m_turbine_id equals s.m_turbine_id
                    where d.m_turbine_id == IPAddress.Parse(id) && d.m_date >= frm
                    group d by d.m_date.Month into g
                    select new statisticsDaily
                    {
                        Date = g.Key.ToString("MMM"),
                        Production = g.Sum(s => s.m_energy_prod),
                        m_wind_speed = g.Average(s => s.m_wind_speed),
                        Availability = g.Average(s => s.m_availability)

                    }
             ).AsEnumerable(); 

        return rslt;


    }

我有一个应该执行异步调用的控制器:

   public async Task StaticsMonthly(string id, string from, string to)
    {
       _statdaily.statsMonthly(id, startDate.ToString(), now.ToString()));
        return Ok( result);
    }

这给了我一个错误严重性代码
错误 CIEnumerable' 不包含'GetAwaiter' 的定义,并且找不到接受类型为'IEnumerable' 的第一个参数的可访问扩展方法'GetAwaiter'(您是否缺少 using 指令或程序集引用?)

标签: asp.net-core

解决方案


使您的 statsMonthly 函数应返回一个任务:

public async<Task<IEnumerable<statisticsDaily>>> statsMonthly(string id, string dtFrom, string dtTo)
{

    var rslt = await ( from d in db.statMonth
                join s in db.masterData on d.m_turbine_id equals s.m_turbine_id
                where d.m_turbine_id == IPAddress.Parse(id) && d.m_date >= frm
                group d by d.m_date.Month into g
                select new statisticsDaily
                {
                    Date = g.Key.ToString("MMM"),
                    Production = g.Sum(s => s.m_energy_prod),
                    m_wind_speed = g.Average(s => s.m_wind_speed),
                    Availability = g.Average(s => s.m_availability)

                }
         ).ToListAsync(); 

    return rslt;


}

然后是您的控制器等待功能:

 public async Task StaticsMonthly(string id, string from, string to)
{
   var results = await _statdaily.statsMonthly(id, startDate.ToString(), now.ToString()));
    return Ok( result);
}

推荐阅读