2012-08-14 50 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