【问题标题】:LINQ to Entities does not recognize the method 'System.String ToString(Int32)' method, and this method cannot be translated into a store expression."}LINQ to Entities 无法识别方法 'System.String ToString(Int32)' 方法,并且此方法无法转换为存储表达式。"}
【发布时间】:2014-12-16 07:44:49
【问题描述】:

我在控制器中使用以下代码

BlueBusDB_Context db = new BlueBusDB_Context();
List<SelectListItem> li =new List<SelectListItem>();

li = db.M_BLUEBUS_STATES.Select(s => new SelectListItem {Text = s.STATE_NAME, Value = Convert.ToString(s.STATE_CODE)}).ToList();

ViewBag.State = li;
return View();

然后在我的创建视图中,我想绑定下拉菜单,并使用如下方式

@Html.DropDownList("State",ViewBag.State as List<SelectListItem>)

我收到上述错误..

【问题讨论】:

  • 你可以使用ViewBag.State = new SelectList(db.M_BLUEBUS_STATES, "STATE_CODE", "STATE_NAME");
  • 非常感谢@StephenMuecke...它解决了我的问题...
  • 在 EF >= 6.1 你可以使用ToString()。
  • @StephenMuecke 你能帮我吗..因为你建议的答案对我有用但是如果我想要一个 where 条件那么我将如何更改 new SelectList(db.M_BLUEBUS_STATES, "STATE_CODE", "STATE_NAME ");
  • var myList = db.M_BLUEBUS_STATES.Where(.....); ViewBag.State = new SelectList(myList, "STATE_CODE", "STATE_NAME");

标签: c# asp.net-mvc linq


【解决方案1】:

Linq to Entities 不支持Convert(请参阅supported funuctions)

我会首先创建一个匿名类型,然后转换为 SelectListItems 以更好地分离关注点:

li = db.M_BLUEBUS_STATES
       .Select(s => new { s.STATE_NAME, s.STATE_CODE })
       .AsEnumerable()
       .Select(x => new SelectListItem { Text = x.STATE_NAME, Value = x.STATE_CODE.ToString()})
       .ToList();

【讨论】:

    【解决方案2】:

    您需要使用常规的ToString 方法而不是Convert 类中的方法:

    li = db.M_BLUEBUS_STATES.Select(s => new SelectListItem {
         Text = s.STATE_NAME, 
         Value = s.STATE_CODE.ToString()
    }).ToList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-02
      • 2011-08-19
      • 2016-12-19
      • 2012-04-21
      相关资源
      最近更新 更多