エンティティへの LINQ エラー: ToString()
メソッドがサポートされていません
MySQL や SQL Server などのデータベース間でデータを移行すると、次の LINQ to Entities エラーが発生する場合があります。
「LINQ to Entities は 'System.String ToString()' メソッドを認識しないため、このメソッドをストア式に変換できません。」
これは、LINQ クエリ内で ToString()
メソッドを使用して文字列をデータベース フィールドと比較しようとすると発生します。 問題は、ToString()
が標準 SQL 関数ではなく、LINQ to Entities がそれを同等の SQL コードに変換できないことです。
解決策: 一時変数の使用
最も簡単な解決策は、LINQ クエリで使用して、ToString()
の文字列結果を変数 before に格納することです。
<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 中国語 Web サイトの他の関連記事を参照してください。