asp.net-core - 我应该如何从我的控制器到我的界面进行异步调用
问题描述
我有一个界面:
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 指令或程序集引用?)
解决方案
使您的 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);
}
推荐阅读
- r - Valgrind/R 不工作:“致命错误:无法创建 'R_TempDir'”
- c# - 加快 N(P) 问题搜索 - 和方问题
- django - 扩展base.html时来自多个应用程序的Django静态CSS
- c# - identityReference.Translate(typeof(System.Security.Principal.NTAccount)).ToString() 未提供完整的域名
- javascript - $(...).Jcrop 不是函数
- python - 检查python中的平衡括号
- reactjs - slideToShow 未呈现指定数量的列
- javascript - 如何使链接适合其内部的组件?
- prolog - Prolog 中的 IF 语句 - 有条件的
- trace - 在 eBPF 中取被调用函数的名称