LINQ to Entities 錯誤:ToString()
不支援方法
在 MySQL 和 SQL Server 等資料庫之間遷移資料有時會觸發此 LINQ to Entities 錯誤:
「LINQ to Entities 無法辨識『System.String ToString()』方法,且此方法無法轉換為儲存運算式。」
當您嘗試在 LINQ 查詢中使用 ToString()
方法將字串與資料庫欄位進行比較時,就會發生這種情況。 問題是 ToString()
不是標準 SQL 函數,LINQ to Entities 無法將其轉換為等效的 SQL 程式碼。
解:使用臨時變數
最簡單的解決方案是將 ToString()
的字串結果儲存在變數 中,然後 在 LINQ 查詢中使用它:
<code class="language-csharp">var strItem = item.Key.ToString(); IQueryable<entity> pages = from p in context.pages where p.Serial == strItem select p;</code>
這避免了在 LINQ 表達式中直接使用 ToString()
,解決了翻譯問題。
替代方案:僱用SqlFunctions
在某些情況下,SqlFunctions
幫助器類別提供了替代方案。 它提供了 LINQ to Entities可以翻譯的資料庫特定函數:
<code class="language-csharp">IQueryable<entity> pages = from p in context.pages where p.Serial == SqlFunctions.StringConvert(item.Key) select p;</code>
SqlFunctions.StringConvert()
執行與 ToString()
類似的轉換,但轉換方式與資料庫的 SQL 方言相容。
說明:
核心問題在於LINQ to Entities如何處理表達式。 它不會直接執行ToString()
;相反,它嘗試將整個表達式轉換為 SQL。由於 ToString()
沒有直接的 SQL 等效項,因此轉換失敗,導致異常。 上述解決方案透過預處理字串或使用資料庫相容的函數來規避此問題。
以上是為什麼 LINQ to Entities 會拋出「方法'System.String ToString()'無法辨識」異常,如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!