我正在将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
答案 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;
,问题已经消失