を含むので、ここでは私のテーブルのクイックバージョンです。私が欲しいもの子の基準の子に基づいて親オブジェクトを取得し、
public class Line
{
// Bunch Of properties
// ...
public List<Tool> Tools {get;set;}
}
public class Tool
{
// Bunch Of properties
// ...
public List<Task> Tasks {get;set;}
}
public class Task
{
// Bunch Of properties
// ...
public List<SchedItem> SchedItems {get;set;}
}
public class SchedItem
{
public DateTime SchedDate {get;set;}
}
はSchedItem.SchedDate
は、日付の範囲内であるか否かに基づいて、子コレクションとその子のコレクションなどを含むすべてのLines
を返しますクエリです。
LinqPadで次のように試しました。返されたデータがクエリに基づいて、すべてのSchedItems
だけでなく、ものを含めているよう
var line = (from p in Lines.Include(x => x.Tools.Select(m => m.Tasks.Select(s => s.SchedItems)))
from t in p.Tools
from m in t.Tasks
from s in m.SchedItems
where s.SchedDate >= StartDateQuery &&
s.SchedDate <= EndDateQuery
select p);
これは私には間違っているようです。
更新1: ええ、私は私の理解が間違っていると思います。私は、私は再びコードを実行すると、私はノー子項目を持つ33のLine
項目のリストを取得し、私のコンテキストコンフィギュレーションに
db.Configuration.LazyLoadingEnabled = false;
db.Configuration.ProxyCreationEnabled = false;
を次のように設定しています。多くの子アイテムを含む1つの 'Line'アイテムのみが必要です。
私のクエリをこれに変更しましたが、今は子アイテムを取得しますが、Line
カウントはまだ33ですが間違っています。
var line = (from p in Lines
from t in p.Tools
from m in t.Tasks
from s in m.SchedItems
where s.SchedDate >= StartDateQuery &&
s.SchedDate <= EndDateQuery
select p).Include(x => x.Tools.Select(m => m.Tasks.Select(s => s.SchedItems)));
これは何度も尋ねられたと思います。熱心な読み込み負荷**エンティティ**。それはすべてかどうかです。例えば'Task.ShedItems'は、** entity **の観点からそうであるため、ロードされると、すべての項目を含みます。フィルタリングを適用する場合は、 'Include'ではなく投影を使用することになっています(このようなシナリオでは無視されます)。 –
ああ、ありがとう、私はこれを調べます。 – Gaz83