首页 > 解决方案 > 无法隐式转换类型'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();
}

标签: c#.net.net-coreienumerablewebapi

解决方案


我怀疑你想要的代码是这样的

return new ActionResult<IEnumerable<GrantProgram>>(await _grants.GetGrants());

为什么您现有的代码不起作用?因为(根据文档):

C# 不支持接口上的隐式强制转换运算符。

它建议:

因此,必须将接口转换为具体类型才能使用 ActionResult。

严格来说这不是真的。这是一个选项,是的(例如 call ToList),但不是必需的。另一种选择(正如我所展示的)是new提升ActionResult自己而不是依赖隐式转换)。

其他阅读:


推荐阅读