2012-09-04 34 views
3

爲什麼EF不能where條件部分翻譯Int32.Parse爲什麼EF無法翻譯Int32.Pars(...

例如下面的代碼有錯誤:??

var query = (from list in dbContext.Packages 
          where list.Id == Int32.Parse(Request["Id"].ToString()) 
          select list).FirstOrDefault(); 

我解決了這個問題:

Int32 ID = Int32.Parse(Request["Id"].ToString()); 
var query = (from list in dbContext.Packages 
          where list.Id == ID 
          select list).FirstOrDefault(); 

回答

2

因爲查詢僅僅是被轉換爲SQL表達式

EF doens不知道如何將Int32.Parse轉換爲等效的SQL語句,因此失敗。

+0

在sql有沒有辦法將字符串轉換爲整數? –

+1

有,但它沒有任何意義。你的查詢將被轉換爲一個常量字符串被轉換爲整數。此外,您正在訪問執行查詢時可能可用或不可用的請求對象。英孚不知道什麼時候會發生,所以它也會在那裏失敗。 – Josh

1

您解決問題的方式是正確的。

where list.Id == Int32.Parse(Request["Id"].ToString()),它是否會工作,意味着送Request到數據庫,對數據庫中提取["Id"],然後調用ToString()Int32.Parse()

Int32 ID = Int32.Parse(Request["Id"].ToString());在客戶端上執行。然後您得到一個整數值,並且只有該整數值被髮送到數據庫。