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

ToString()Linq to SQL は、どの 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 は実行されていません。

もう 1 つの問題は、Leniel Macaferi の回答で説明されています。

アップデート

私の回答以来、ターゲットテクノロジーが変更されたため(質問タグ)、別のアプローチも提案できます。

LINQ クエリの代わりにSqlFunctions.StringConvertを使用でき、EF はそれを変換できます。ToString

于 2013-02-08T13:15:43.810 に答える
0

ViewBagコントローラーで作成したプロパティを利用していません。

代わりにこれを行います:

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