JetBrains Rider 2026.1 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 年 6 月 12 日