ホームページ > バックエンド開発 > C++ > LINQ to Entities が「メソッド 'System.String ToString()' が認識されません」例外をスローするのはなぜですか?それを修正するにはどうすればよいですか?

LINQ to Entities が「メソッド 'System.String ToString()' が認識されません」例外をスローするのはなぜですか?それを修正するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-22 09:01:09
オリジナル
162 人が閲覧しました

Why Does LINQ to Entities Throw a

エンティティへの 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート