EF では、クエリの結果にナビゲーション プロパティを含める場合は、Include()
. 一部のクエリでは、これを複数回呼び出す必要があるため、この概念の一般的なラッパーを作成しようとしました。
public IQueryable<T> FindAll<P>(params Expression<Func<T, P>>[] predicates) where P : class {
var entities = AllEntities();
foreach (var p in predicates) entities = entities.Include(p);
return entities;
}
そしてそれを次のように呼び出します:
var customers = FindAll(q => q.Orders, q => q.Invoices, q => q.Contacts);
質問:
- 関数はコンパイルされますが、呼び出すと、「メソッドの型引数は使用法から推測できません。型引数を明示的に指定してみてください。」私は何を間違っていますか?
- 私がそれを機能させたら
Include()
、最初に呼び出すことができます:var customers = FindAll(q => q.Orders, q => q.Invoices);
そして、後で別のステップでもう一度呼び出します:customers = customers.Include(p => p.Invoices);
または、一度にインクルードを実行する必要があるようなパフォーマンスの低下につながりますか?
編集:
もちろん、JonSkeetの答えは正しいですが、それでも私が望むことをしているように見えるこの解決策があります。ただし、なぜ機能するのかはわかりません。機能のせいAggregate()
?