LINQ to Entities:排除「System.String ToString()」錯誤
使用LINQ to Entities (LINQ2E) 查詢和操作關係資料庫中的資料時,您可能會遇到錯誤:「LINQ to Entities 無法辨識方法'System.String ToString()' 方法,而此方法無法翻譯成商店表達式。 ToString()
<code class="language-C#">using (var context = new Context()) { // ... foreach (var item in collection) { IQueryable<entity> pages = from p in context.pages where p.Serial == item.Key.ToString() select p; foreach (var page in pages) { DataManager.AddPageToDocument(page, item.Value); } } Console.WriteLine("Done!"); Console.Read(); }</code>
是在 ToString()
子句中的 item.Key
(字串)上呼叫的。 LINQ2E 很難將其轉換為 SQL,因為 where
缺乏直接的 SQL 對應項。 ToString()
問題的解決方案
最直接的解決方案是將字串值預先指派給變數:
<code class="language-C#">var strItem = item.Key.ToString(); IQueryable<entity> pages = from p in context.pages where p.Serial == strItem select p;</code>
視為常數,從而消除了翻譯的需要。 strItem
替代方案(EF Core 2.1 及更高版本):
EF Core 2.1 及更高版本提供了 輔助類,專門為 LINQ2E 表達式提供了 SqlFunctions
方法:StringConvert
<code class="language-C#">IQueryable<entity> pages = from p in context.pages where p.Serial == SqlFunctions.StringConvert((double?)item.Key) // Note the cast to (double?) select p;</code>
範例中的 (double?)
轉換所示。 這對於資料庫相容性通常是必需的。 SqlFunctions
以上是為什麼 LINQ to Entities 會引發「System.String ToString()」異常,以及如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!