asp mvc c中的转换错误#

时间:2012-08-14 10:48:12

标签: c# asp.net-mvc

我使用以下代码行:

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 个答案:

答案 0 :(得分:2)

你想要实际获得该对象,直到你使用如下的FirstOrDefault才会发生这种情况;

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

也值得一读Linq的延期加载

答案 1 :(得分: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();

答案 2 :(得分:0)

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

答案 3 :(得分: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"])).