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 メソッドを使用しようとしていると想定します。Func
Expression<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()