c# - 无法隐式转换类型'IEnumerable' 到 ' 动作结果>'
问题描述
我正在尝试从数据库中获取条目列表。但我收到一个错误。
无法将类型“System.Collections.Generic.IEnumerable<models.DbModels.GrantProgram>”隐式转换为“Microsoft.AspNetCore.Mvc.ActionResult<System.Collections.Generic.IEnumerable<models.DbModels.GrantProgram>>”[API]
请帮我。我该如何解决这个问题?
控制器.cs
public async Task<ActionResult<IEnumerable<GrantProgram>>> GetGrants()
{
//This is where the error is showing.
return await _grants.GetGrants();
}
业务层
IGrants.cs
Task<IEnumerable<GrantProgram>> GetGrants();
Grants.cs
public async Task<IEnumerable<GrantProgram>> GetGrants()
{
return await _grantRepository.GetGrants();
}
数据访问层
IGrantsRepository.cs
Task<IEnumerable<GrantProgram>> GetGrants();
GrantsRepository.cs
public async Task<IEnumerable<GrantProgram>> GetGrants()
{
return await _context.GrantProgram.ToListAsync();
}
解决方案
我怀疑你想要的代码是这样的
return new ActionResult<IEnumerable<GrantProgram>>(await _grants.GetGrants());
为什么您现有的代码不起作用?因为(根据文档):
C# 不支持接口上的隐式强制转换运算符。
它建议:
因此,必须将接口转换为具体类型才能使用 ActionResult。
严格来说这不是真的。这是一个选项,是的(例如 call ToList
),但不是必需的。另一种选择(正如我所展示的)是new
提升ActionResult
自己而不是依赖隐式转换)。
其他阅读:
推荐阅读
- php - 如何通过php中的值将数据组装到数组中
- c# - 注册 StackExchangeRedisCache 中间件后更改 RedisCacheOptions
- css - *ngIf 用于样式标签
- r - 如何使用 R 识别和删除 data.frame 中的异常值?
- javascript - 反应原生的嵌套数组
- c# - 在c#中将字符串添加到excel自定义格式
- javascript - 如何抓取任何网站的 html,查找特定值并进行操作,然后将数据发送回客户端?
- android - 如何使用 JetPack Compose 在 LazyColumn 项目中单击导航到详细视图?
- python - 带有“for”循环和字典的动态 TCP 服务器
- python - Pandas 将 polyfit 应用于一个系列的值