首頁 >後端開發 >C++ >為什麼 LINQ to Entities 會拋出「方法'System.String ToString()'無法辨識」異常,如何修復它?

為什麼 LINQ to Entities 會拋出「方法'System.String ToString()'無法辨識」異常,如何修復它?

Susan Sarandon
Susan Sarandon原創
2025-01-22 09:01:09165瀏覽

Why Does LINQ to Entities Throw a

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn