我使用以下代码行:
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'。存在显式转换(您是否错过了演员?)
答案 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"])).