コードインスペクション: 関数は 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 日