内部 .NET Framework データ プロバイダー エラー 1025 質問する

内部 .NET Framework データ プロバイダー エラー 1025 質問する
IQueryable<Organization> query = context.Organizations;

Func<Reservation, bool> predicate = r => !r.IsDeleted;

query.Select(o => new { 
    Reservations = o.Reservations.Where(predicate)
}).ToList();

このクエリは「内部 .NET Framework データ プロバイダー エラー 1025」例外をスローしますが、以下のクエリはスローしません。

query.Select(o => new { 
    Reservations = o.Reservations.Where( r => !r.IsDeleted)
}).ToList();

正しい述語を構築するためにいくつかの if ステートメントをチェックする必要があるため、最初のものを使用する必要があります。この状況では if ステートメントを使用できないことはわかっているので、デリゲートをパラメーターとして渡します。

最初のクエリを機能させるにはどうすればよいですか?

ベストアンサー1

他の回答は正しいですが、select ステートメントの後にこれを使用しようとする場合は、明示的に呼び出す必要があることに注意してください。そうしないと、コンパイラは、ではなく をAsQueryable()期待する IEnumerable メソッドを使用しようとしていると想定します。FuncExpression<Func>

これはおそらく元の投稿者の問題です。そうでなければ、コンパイラはほとんどの場合、Expression<Func>ではなくを探しているとエラーを出しますFunc

デモ: 以下は失敗します:

MyContext.MySet.Where(m => 
      m.SubCollection.Select(s => s.SubItem).Any(expr))
         .Load()

以下は機能します:

MyContext.MySet.Where(m => 
      m.SubCollection.Select(s => s.SubItem).AsQueryable().Any(expr))
         .Load()

おすすめ記事