1. ホーム
  2. c#

[解決済み] LINQ to Entities は 'System.String ToString()' メソッドを認識せず、このメソッドはストア式に変換できない。

2022-07-05 11:22:14

質問

私はあるものを1つのmysqlサーバーからsqlサーバーに移行していますが、私はこのコードを動作させる方法を見つけ出すことができません。

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();
}

に入ると、2番目の foreach (var page in pages) に入ると、例外が発生します。

LINQ to Entities は、'System.String ToString()' メソッドを認識せず、このメソッドはストア式に変換できません。 式に変換することはできません。

なぜこのようなことが起こるのか、どなたかご存知ですか?

どのように解決するのですか?

文字列を一時変数に保存し、それを式の中で使用すればよいのです。

var strItem = item.Key.ToString();

IQueryable<entity> pages = from p in context.pages
                           where  p.Serial == strItem
                           select p;

この問題が発生するのは ToString() が実際に実行されるのではなく メソッドグループ に変換され、パースされて SQL に変換されます。は存在しないので ToString() に相当するものがないため、式は失敗します。

注意してください。

次のページもご覧ください。 アレックスの回答 に関する SqlFunctions ヘルパークラスが追加されました。多くの場合、これによって一時的な変数が不要になることがあります。