LINQ to Entities:解決「方法無法辨識」異常
資料庫遷移常常會導致方法辨識問題。一個常見的錯誤是:
「LINQ to Entities 無法辨識『System.String ToString()』方法,且此方法無法轉換為儲存運算式。」
這通常發生在將字串屬性與字串表達式進行比較時,如下所示:
<code>IQueryable<entity> pages = from p in context.pages where p.Serial == item.Key.ToString() select p;</code>
了解根本原因:
ToString()
方法不會直接執行,而是被視為 MethodGroup。 LINQ 嘗試將此組轉換為等效的 SQL 表達式。 如果目標資料庫缺少直接的 ToString()
等效項,則翻譯失敗。
解決方案:預先儲存字串值:
最簡單的修復方法是在比較之前將字串結果儲存在變數中:
<code>string strItem = item.Key.ToString(); IQueryable<entity> pages = from p in context.pages where p.Serial == strItem select p;</code>
這會從查詢中刪除 ToString()
調用,從而防止翻譯錯誤。
替代方案:利用 SqlFunctions:
SqlFunctions
幫助程式類別為 LINQ to Entities 查詢提供特定於資料庫的函數。對於ToString()
,您可以嘗試:
<code>IQueryable<entity> pages = from p in context.pages where SqlFunctions.StringConvert((decimal?)p.Serial) == item.Key select p;</code>
請注意對 (decimal?)
的轉換,這通常是必要的,這取決於 p.Serial
的基礎資料庫類型。 SqlFunctions
可以簡化程式碼並避免臨時變量,但需要仔細考慮資料類型。
以上是為什麼在使用 ToString() 時 LINQ to Entities 會引發「方法無法辨識」異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!