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

问题是 LINQ 扩展方法Select返回IQueryable你映射的任何类型的 a。

你实际上想要一个元素,通过它的 ID。如果它不可能不存在,您应该使用Single. 否则,您应该使用SingleOrDefault.

使用Single(如果找不到则抛出):

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

使用SingleOrDefaultnull如果没有找到则返回):

Nav nav = navDB.Navs.SingleOrDefault(row => row.ID == Convert.ToInt32(Request.Form["ID"])).
于 2012-08-14T10:54:34.497 回答
0
Nav n = navDB.Navs.Where(row => row.ID == Convert.ToInt32(Request.Form["ID"])).FirstOrDefault();
于 2012-08-14T10:52:58.643 回答