LINQ to Entities の「メソッド 'System.String ToString()' が認識されない」のトラブルシューティング
データベース移行プロジェクトでは、「LINQ to Entities が 'System.String ToString()' メソッドを認識しません」というイライラするエラーが頻繁に発生します。 これは、LINQ to Entities が LINQ クエリ内の ToString()
メソッド呼び出しをデータベース互換の式に変換できないために発生します。 この問題は、特に、LINQ クエリ内で直接文字列フィールドに対して ToString()
を使用する場合に発生します。
解決策: 文字列変換の前処理
最も簡単な修正は、LINQ クエリ自体の内部で ToString()
を使用しないようにすることです。 代わりに、事前に文字列変換を実行し、結果を変数に代入します。 これにより、文字列操作がデータベース クエリの変換から分離されます。 例:
<code class="language-csharp">string strItem = item.Key.ToString(); IQueryable<entity> pages = from p in context.pages where p.Serial == strItem select p;</code>
文字列を事前変換することにより、LINQ クエリが SQL に変換される前に ToString()
が実行され、エラーが防止されます。
代替: Entity Framework の SqlFunctions (新しいバージョン)
新しい Entity Framework バージョンでは、SqlFunctions
ヘルパー クラスを介して、より洗練されたソリューションが提供されます。 このクラスは、LINQ クエリ内で使用するために特別に設計された ToString()
メソッドを提供し、一時変数の必要性を排除します。 これにより、コードがよりコンパクトで読みやすくなります。
以上がLINQ to Entities で「メソッド 'System.String ToString()' が認識されません」エラーがスローされるのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。