JetBrains Rider 2026.2 Help

コードインスペクション: 関数は SQL に変換できず、データベースコンテキストで呼び出すことはできません

エンティティフレームワークは、LINQ クエリ内のメソッドを DBMS で実行される SQL に変換しようとします。 ただし、すべての .NET メソッドがサポートされているわけではありません。 LINQ to Entities でサポートされていないメソッドが呼び出される場合、呼び出しは実行時に失敗し、通常は NotSupportedException がスローされます

この問題を解決するには、SQL に変換可能な LINQ クエリの部分のみがデータベースコンテキストの範囲内で使用されるようにします。 他の部分はクエリの後に使用し、メモリ内で実行する必要があります。

以下の例では、翻訳不可能なメソッド Reverse() が Where() 句内で呼び出され、データベースコンテキストに直接関連付けられています。 エンティティフレームワークがこの LINQ クエリを解決しようとするとき、 Where() 句とその内部のすべてを SQL に変換する必要がありますが、 Reverse() に相当する SQL がないため失敗します。

この場合の修正方法は、 AsEnumerable() とクエリの実行コンテキストをデータベース IQueryable からメモリ内の IEnumerable に移動することです。

public static void Test() { var context = new MyContext(); foreach (var person in context.People.Where(person => person.Accounts.AsEnumerable().Reverse().Any())) { Console.WriteLine(person); } }
public static void Test() { var context = new MyContext(); foreach (var person in context.People.AsEnumerable().Where(person => person.Accounts.Reverse().Any())) { Console.WriteLine(person); } }
2026 年 8 月 5 日