0

次のコード行を使用しています。

NavItemsDataContext navDB = new NavItemsDataContext();
Nav n = navDB.Navs.Select(row => row.ID == Convert.ToInt32(Request.Form["ID"]));

フォームの非表示の「ID」と一致する ID を持つデータベース内の任意の行にアクセスしようとしています。

エラー 23 型 'System.Linq.IQueryable' を 'MvcApplication1.Models.Nav' に暗黙的に変換できません。明示的な変換が存在します (キャストがありませんか?)

4

4 に答える 4

2

実際にオブジェクトを取得したい場合、以下のように FirstOrDefault を使用するまで、これは発生しません。

navDB.Navs.FirstOrDefault(row => row.ID == Convert.ToInt32(Request.Form["ID"]));

Linqの遅延読み込みについても読む価値があるかもしれません

于 2012-08-14T10:50:06.040 に答える
1

そのはず

Nav n = navDB.Navs.Where(row => 
                 row.ID == Convert.ToInt32(Request.Form["ID"])).FirstorDefault();

編集:あなたと会話した後(コメントを参照)、私はこの解決策にたどり着きました

Nav n = navDB.Navs.Where(row => 
        {
            int i = 0;

            if (int.TryParse(Request.Form["ID"].ToString(), out i))
            {
                if(row.ID == i)
                 return true;
            }

            return false;
        }).FirstorDefault();
于 2012-08-14T10:49:41.640 に答える
0
Nav n = navDB.Navs.Where(row => row.ID == Convert.ToInt32(Request.Form["ID"])).FirstOrDefault();
于 2012-08-14T10:52:58.643 に答える
0

問題は、LINQ 拡張メソッドが、マップした型Selectの を返すことです。IQueryable

実際には、ID によって単一の要素が必要です。存在しないことが不可能な場合は、 を使用する必要がありますSingle。それ以外の場合は、を使用する必要がありますSingleOrDefault

使用Single(見つからない場合はスロー):

Nav nav = navDB.Navs.Single(row => row.ID == Convert.ToInt32(Request.Form["ID"])).

使用(見つからない場合はSingleOrDefault戻ります):null

Nav nav = navDB.Navs.SingleOrDefault(row => row.ID == Convert.ToInt32(Request.Form["ID"])).
于 2012-08-14T10:54:34.497 に答える