无法隐式转换类型'System.Collections.Generic.List <>'

时间:2018-08-14 10:24:43

标签: c# linq asp.net-web-api

我正在使用VS 2017开发我的.NET应用程序。我编写了以下代码来从api中的表中检索数据

[HttpGet]
[Route("Index")]
public IEnumerable<Strings> Index()
{
    var list = db.Strings.Select(x => new { x.Iid, x.Value, x.Description, x.Itype }).ToList();
    return list;
}

我遇到以下错误:

  

错误CS0266无法将类型'System.Collections.Generic.List <>'隐式转换为'System.Collections.Generic.IEnumerable'。存在显式转换(您是否缺少演员表?)**

如何进行铸造?我已经将IEnumerable更改为IList,但是存在问题。我不想为此创建ViewModel。

2 个答案:

答案 0 :(得分:8)

您要使用Select(x => new …)创建一个匿名对象列表,然后尝试将其作为IEnumerable<Strings>返回,这就是您收到错误消息的原因。

无论如何(1)您都无法从方法中返回匿名对象,因此,请更改查询以返回Strings的列表,或使用中间对象来表示数据。

(1)可以,但是不能以可用的形式。

答案 1 :(得分:3)

为什么不这样做:

public IEnumerable<Strings> Index()
    {
        var list = db.Strings.AsEnumerable();
        return list;
    }

或者如果要投影到模型:

        public IEnumerable<Strings> Index()
    {
        var list = db.Strings.Select(x => new Strings { Iid = x.Iid, Itype = x.Itype, Description = x.Description, Value = x.Value } ).AsEnumerable();
        return list;
    }