首頁 > 後端開發 > C++ > 為什麼在使用 ToString() 時 LINQ to Entities 會引發「方法無法辨識」異常?

為什麼在使用 ToString() 時 LINQ to Entities 會引發「方法無法辨識」異常?

Patricia Arquette
發布: 2025-01-22 09:11:09
原創
896 人瀏覽過

Why Does LINQ to Entities Throw a

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板