2

我正在尝试将 selectList 插入到视图(表单)中。我想我会通过在控制器中填充列表并将其作为视图包发送到视图来实现。这是我到目前为止得到的:

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.

有什么建议么?

4

2 回答 2

0

您没有使用ViewBag您在控制器中创建的属性。

改为这样做:

@Html.DropDownList("ProductCategoriesId",
                    ViewBag.ProductCategoriesId as SelectList,
                    string.Empty)
于 2013-02-08T13:03:54.890 回答
0

Linq to SQL 无法转换ToString()为任何 SQL 命令。这是可以理解的。您应该在将它们转换为之前执行查询SelectListItems(或避免 ToString() 调用)。例如

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
                        });

请注意,Linq2Sql 在您调用query.ToList(). 直到此时,没有运行 SQL。

Leniel Macaferi 的回答中描述了另一个问题。

更新

因为我的回答之后目标技术发生了变化(问题标签),我也可以建议您采用不同的方法:

您可以使用SqlFunctions.StringConvert而不是ToString在您的 LINQ 查询中,EF 可以翻译它。

于 2013-02-08T13:15:43.810 回答