我正在尝试将selectList插入视图(表单)。我想我会通过填充控制器中的列表并将其作为viewbag发送到视图来实现。这是我到目前为止所得到的:
var query = from p in db.ProductCategories
join pt in db.ProductCategoriesTranslations on p.ProductCategoriesId equals pt.ProductCategoriesId
where pt.ProductLanguage.Equals("se")
orderby pt.ProductCategoriesName
select new SelectListItem
{
Value = p.ProductCategoriesId.ToString(),
Text = pt.ProductCategoriesName
};
ViewBag.ProductCategoriesId = query;
return View();
然后在视图中我有:
@Html.DropDownList("ProductCategoriesId", String.Empty)
我认为这很简单直接但是当我加载它时会崩溃并出现以下错误:
LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression.
有什么建议吗?
答案 0 :(得分:0)
您没有使用您在控制器中创建的ViewBag
属性。
请改为:
@Html.DropDownList("ProductCategoriesId",
ViewBag.ProductCategoriesId as SelectList,
string.Empty)
答案 1 :(得分:0)
Linq to SQL无法将ToString()
转换为任何SQL命令。这是可以理解的。您应该在将查询转换为SelectListItems
之前执行查询(或避免ToString()调用)。 E.g。
var query = from p in db.ProductCategories
join pt in db.ProductCategoriesTranslations on p.ProductCategoriesId equals pt.ProductCategoriesId
where pt.ProductLanguage.Equals("se")
orderby pt.ProductCategoriesName;
select new { Id = p.ProductCategoriesId, Name = pt.ProductCategoriesName };
ViewBag.ProductCategoriesId = query.ToList().Select(p =>
new SelectListItem
{
Value = p.Id.ToString(),
Text = p.Name
});
请注意,当您致电query.ToList()
时,Linq2Sql会评估表达式。在此之前,没有SQL正在运行。
另一个问题在Leniel Macaferi的回答中有描述。
<强>更新强>
由于我的回答我可以建议你采用不同的方法,因此改变了目标技术(问号):
您可以在LINQ查询中使用SqlFunctions.StringConvert代替ToString
,EF可以翻译它。