错误 - LINQ to Entities无法识别方法' System.String ToString(System.IFormatProvider)'

时间:2014-10-26 22:05:07

标签: c# linq entity-framework asp.net-mvc-4

我正在将MVC3 linq-to-sql转换为MVC5实体框架6.1;我在下拉列表中使用了以下帮助器:

public static string ExDropDownList (this HtmlHelper helper, string name, IEnumerable<SelectListItem> selectList, bool readOnly, object htmlAttributes)
{
    string html = "";
    if (readOnly)
    {
        foreach (SelectListItem item in selectList)
        {
            if (item.Selected)
            {
                html = String.Format("<label for='{0}'>{1}</label>", name, item.Text);
                break;
                }
            }
        }
    else
        html = AddEmptyOption(System.Web.Mvc.Html.SelectExtensions.DropDownList(helper, name, selectList, htmlAttributes).ToString());
    return html;
}

我使用以下方式生成此列表:

var proviences = lookupRepository.GetProviences();
IEnumerable<SelectListItem> selectListProvience =  from p in proviences
   select new SelectListItem
   {
      Text = p.ProvinceName,
      Value = p.ProvinceID.ToString(CultureInfo.InvariantCulture)
    };

我收到以下错误:

LINQ to Entities does not recognize the method 'System.String ToString(System.IFormatProvider)' method, and this method cannot be translated into a store expression

3 个答案:

答案 0 :(得分:0)

实体框架正在尝试将其转换为SQL,但由于无法处理ToString()而失败。请尝试添加ToList()

var proviences = lookupRepository.GetProviences().ToList();

这会导致查询执行,但如果您仍然选择列表中的每个项目,这都可以。

答案 1 :(得分:0)

在调用ToString()之前,需要实现查询。

var proviences = lookupRepository.GetProviences();
IEnumerable<SelectListItem> selectListProvience = (from p in proviences).AsEnumerable()
  .Select(p => new SelectListItem
  {
     Text = p.ProvinceName,
    ....

但它可能只是

var proviences = lookupRepository.GetProviences();
IEnumerable<SelectListItem> selectListProvience = proviences.Select(p => new SelectListItem
{
  Text = p.ProvinceName,

或更容易

SeelctList selectListProvience = new SelectList(proviences, "ProvinceID", "ProvinceName");

答案 2 :(得分:0)

分离我的模型项目时遇到了同样的问题 我删除了using System.Data.Objects.SqlClient;并将其替换为using System.Data.Entity.SqlServer;,问题已经消失