2012-08-14 62 views
0

我使用下面的代码行:错误与ASP MVC转换C#

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

选择是一种误导,它不会做一个选择的在一个sql select语句中 - 使用.Find(Convert.ToInt32(Request.Form [“ID”])在主键上进行选择 – jcvandan 2012-08-14 12:49:02

回答

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(); 
+0

这让我无任何错误地构建,但是当我到达这部分站点时它给 me:异常详细信息:System.FormatException:输入字符串的格式不正确。 – 2012-08-14 10:59:29

+0

@KarlHumphries:检查Request.Form [“ID”]中的内容' – 2012-08-14 11:02:31

+0

这正是我需要做的,但我对此并不了解,并且不知道如何检查Request.Form [ ID“]是应该的。感谢您的帮助至此 – 2012-08-14 11:05:39

2

您希望实际获得对象,直到您使用下面的FirstOrDefault时才会发生这种情况;

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

可能是值得还了LINQ的延迟加载

+0

感谢您的快速回复,这种更改导致错误错误不能隐式地将类型'System.Linq.IQueryable '转换为'MvcApplication1.Models.Nav'。存在明确的转换(您是否缺少演员?) – 2012-08-14 10:54:33

+0

您收到的错误消息是什么 – saj 2012-08-14 10:55:25

+0

@KarlHumphries:看看我的答案。 – 2012-08-14 10:56:31

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

谢谢,这让我没有任何错误的构建,但是当我到达这部分的网站时,它给了我:异常详细信息:System.FormatException:输入字符串的格式不正确。 – 2012-08-14 11:00:40

+0

@KarlHumphries:看看我编辑的答案。 – 2012-08-14 11:24:43

0

阅读起来的问题是,Select返回任何类型的你映射的IQueryable的LINQ扩展方法。

你实际上想要一个单一的元素,通过它的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"])). 
+0

嗨,谢谢,这是我开始使用的代码,我有同样的问题,它意味着我试图将bool转换为int(我不认为我是) – 2012-08-14 11:02:33

+0

您使用过调试器吗? Request.Form [“ID”]具有什么价值? Nav.ID是什么类型? – 2012-08-14 11:04:06