ホームページ > バックエンド開発 > C++ > 「LINQ to Entities はメソッド 'System.String ToString()' メソッドを認識しません」という例外を解決する方法

「LINQ to Entities はメソッド 'System.String ToString()' メソッドを認識しません」という例外を解決する方法

DDD
リリース: 2025-01-22 09:17:09
オリジナル
535 人が閲覧しました

How to Resolve the

LINQ to Entities の「ToString() メソッドが認識されません」エラーのトラブルシューティング

LINQ to Entities を使用する場合、「LINQ to Entities はメソッド 'System.String ToString()' メソッドを認識しません。」というエラーが発生する場合があります。これは、LINQ to Entities が ToString() メソッドをデータベース互換のクエリに変換するのに苦労するために発生します。 解決策には、LINQ クエリ内で ToString() を直接使用しないようにすることが含まれます。

この問題に対処する修正されたコード例を次に示します。

<code class="language-csharp">using (var context = new Context())
{
    // ...

    foreach (var item in collection)
    {
        string strItem = item.Key.ToString(); // Assign ToString() result to a variable

        IQueryable<entity> pages = from p in context.pages
                                   where p.Serial == strItem
                                   select p;
        foreach (var page in pages)
        {
            DataManager.AddPageToDocument(page, item.Value);
        }
    }

    Console.WriteLine("Done!");
    Console.Read();
}</code>
ログイン後にコピー

item.Key.ToString() の結果を strItem 変数に事前に代入することで、変換の問題を回避します。 where 句では、LINQ to Entities プロバイダーが効果的に処理できる文字列リテラルが使用されるようになりました。

代替アプローチ: SqlFunction の活用

Entity Framework は、データベース固有の関数を提供する SqlFunctions ヘルパー クラスを提供します。 これは、このような場合により洗練されたソリューションを提供します。 SqlFunctions.StringConvert メソッドを使用すると、データベース クエリ自体内で変換できます。

このソリューションを実装する方法は次のとおりです:

<code class="language-csharp">using (var context = new Context())
{
    // ...

    foreach (var item in collection)
    {
        IQueryable<entity> pages = from p in context.pages
                                   where SqlFunctions.StringConvert((double?)p.Serial) == item.Key.ToString() //Note the cast to (double?) if needed
                                   select p;
        foreach (var page in pages)
        {
            DataManager.AddPageToDocument(page, item.Value);
        }
    }

    Console.WriteLine("Done!");
    Console.Read();
}</code>
ログイン後にコピー

このアプローチでは、データベース クエリ内で文字列変換が維持されるため、効率が向上し、変換エラーが回避されます。 SqlFunctions.StringConvert は多くの場合、データベース フィールドを適切な型にキャストする必要があることに注意してください (たとえば、(double?)p.Serial が数値型の場合は p.Serial)。 データベース スキーマに一致するように、必要に応じてキャストを調整します。 一般に、パフォーマンスを向上させ、コードをクリーンにするために、この方法が推奨されます。

以上が「LINQ to Entities はメソッド 'System.String ToString()' メソッドを認識しません」という例外を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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