は、そのアーキテクチャを想定してくださいエンティティタイプによって含めます)入れ子になっているすべてのエンティティ:EF条件は
var query = myContext.Mammals
.IncludeIfTypeIs<Dog>(d => d.Tail)
.IncludeIfTypeIs<Bat>(b => b.Wing)
.IncludeIfTypeIs<Buffalo>(b => b.Horns)
...
...
;
私は別にそれを行うことができると知っていますが、私は多くのエンティティを持っているので、データベースの要求を最小限に抑える必要があります。
これは、多くのデータベース要求も行うため、遅延読み込みを使用したくないです。
これを達成する方法は?
public static class Extensions
{
public static IQueryable<Mammal> IncludeExtraEntities<Mammal,T>(this IQueryable<Mammal> query, T derivedType) where T :Mammal
{
if (derivedType is Dog)
return query.Include("Tail");
if (derivedType is Bat)
return query.Include("Wing");
return query;
}
}
その後、あなたのデシベルの呼び出しで:
var query = myContext.Mammals.IncludeExtraEntities(typeof(Dog));
多分これが動作します
を、私は、コレクションの作品が含まれてこれができないと思うし、それに基づいてそれはクエリを準備し、SQLジョインを実行しますが、あなたのケースでは、私は完全にlinqの目的をSQLに敗北させると思う 'Mammal'の個々のインスタンスで動作しているようです。 –
あなたのコメントをありがとうが、私はlinq SQLの目的を敗北させるとは思わない。私はそれぞれのママの種類ごとに1つのクエリを作成し、それをすべて呼び出すことが義務付けられています。それは遅れてしまい、アプリケーションを複雑にします。私のアプリケーションでは、例えば、さまざまなプロパティを持つHornのタイプを持つことができます。これらのプロパティを条件付きでロードすることもできます... –
すべてのmamalsを繰り返し処理し、そのタイプをチェックし、それはそのタイプの場合のみ....? –