无法隐式转换类型' System.Data.Linq.ISingleResult<""> to' System.Collections.Generic.IEnumerable<" "取代。存在显式转换?

时间:2016-05-11 17:59:30

标签: c# asp.net-mvc linq

我的控制器文件包含如下。

public ActionResult Index()
{
    CityNameList ct = dt.AllCity();   /*Returns Citynames. Used Linq to Sql Classes to retrieve from DB. */

    return View(ct);
}

在Model

中的CityNameList.cs文件中
public class CityNameList
{
    public IEnumerable<string> CityName {get;set;}
}

真的很多尝试解决了这个问题,但没有用。 我是MVC的新手。我需要明确的想法将数据传递给View中的存储过程结果。

2 个答案:

答案 0 :(得分:0)

看起来你正在使用LinqToSql。如果存储过程返回ISingleResult,那么您需要枚举结果以获取数据。您可以调用ToList()将结果转换为IEnumerable。它看起来像

var result = dt.AllCity();
CityNameList ct = null;
if (result != null && result.Any()) {
    ct = new CityNameList { CityName = result.ToList()};
}
return View(ct);

答案 1 :(得分:-1)

将CityNameList类属性更改为:

 public class CityNameList 
   {       
       public string CityName{ get; set; }
   }

并添加另一个类以将存储过程输出映射到类CityNameList,如下所示。

public class CityDataContext
{
   DataDataContext dt = new DataDataContext();
   public IEnumerable<CityNameList> DisplayName
    {
       get
       {
           List<CityNameList> Details = new List<CityNameList>();
           var result = dt.AllCity().ToList();
           for (int j = 0; j < result.Count;j++ )
           {
               CityNameList city = new CityNameList();
               city .CityName= Convert.ToString(result[j].cityname);

               Details.Add(city);
           }
           return Details;
       }
   }
}

for循环中的cityname是在DB中执行存储过程后将返回的表的列名,最后使用Model Class CityNameList添加强类型视图。它将正常工作....