我有一些代码,如下所示。我得到了运行时异常说:
"类型' System.NotSupportedException'的例外情况发生在 System.Data.Entity.dll但未在用户代码中处理
附加信息:LINQ to Entities无法识别方法' System.String ToString()'方法,这个方法不能 翻译成商店表达。"
"Value = sup.SupplierID.ToString()"
和"Value = cat.CategoryID.ToString()"
导致的异常原因似乎实体框架无法使用ToString()
生成表达式树,但对于SelectListItem
,我必须给它一个字符串。
谁能提供简单的解决方案将非常感谢。
namespace MvcApplication1.Models
{
public class ProductEditViewModel : Product
{
public IEnumerable<SelectListItem> SupplierDropDownItems { get; set; }
public IEnumerable<SelectListItem> CategorieDropDownitems { get; set; }
}
}
[HttpGet]
public ActionResult ProductEdit(Int32 ProductId)
{
var northwind = new NorthwindEntities();
var q = from p in northwind.Products
where p.ProductID == ProductId
select new ProductEditViewModel
{
ProductID = p.ProductID,
ProductName = p.ProductName,
UnitPrice = p.UnitPrice,
SupplierDropDownItems = from sup in northwind.Suppliers select new SelectListItem { Text = sup.CompanyName, Value = sup.SupplierID.ToString(), Selected = p.Supplier.SupplierID == p.SupplierID },
CategorieDropDownitems = from cat in northwind.Categories select new SelectListItem { Text = cat.CategoryName, Value = cat.CategoryID.ToString(), Selected = p.Category.CategoryID == p.CategoryID },
Discontinued = p.Discontinued
};
return View(q.SingleOrDefault());
}
<div class="form-group">
@Html.LabelFor(model => model.SupplierID, "SupplierID", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("SupplierID", Model.SupplierDropDownItems, htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.SupplierID, "", new { @class = "text-danger" })
</div>
</div>
答案 0 :(得分:1)
使用SqlFunctions.StringConvert之类的:
Value = SqlFunctions.StringConvert((double)cat.CategoryID)
另一个选项是枚举内存中的所有记录,然后使用ToString
,如:
from sup in northwind.Suppliers.AsEnumerable()
select new SelectListItem { Text = sup.CompanyName, Value = sup.SupplierID.ToString(), Selected = p.Supplier.SupplierID == p.SupplierID },
AsEnumerable
将从数据库中获取所有记录并将其加载到内存中,因此不需要调用ToString
来转换为SQL。
答案 1 :(得分:1)
而不是.ToString(),用户Convert.ToString(您的值);
答案 2 :(得分:1)
您似乎正在使用旧版本的EF - 较新版本的Entity Framework支持ToString()
(从版本6.1开始)
参见EF 6.1的Release Notes:
EF6.1中的内容
EF6.1增加了以下新功能:
[...]
- 在LINQ查询中支持.ToString,String.Concat和enum HasFlags。