Отложенная загрузка: для данного объекта, связанные с ним коллекции могут быть пустыми при первой загрузке, но при первом повторении этих коллекций LINQ to SQL запускает запросчтобы загрузить эти коллекции после загрузки, коллекция становится доступной для использования в будущем, не требуя другого запроса:
var query = from o in db.GetTable<Order>() //db is the datacontext
select o;
foreach(Order o in query)
{
foreach(OrderDetail d in o.OrderDetails)//Deferred loading
{
//Do something on these collections
}
}
OrderDetails
загружаются, только если они повторяются, поэтому еслиOrderDetatils
никогда не повторяется, соответствующий запрос никогда не выполняется.
Стремительная загрузка: немедленная загрузка связанных коллекций для всех объектов, на которые ссылаются, например LINQ to SQL будетавтоматически приносит все OrderDetails
для всех полученных заказов
DataLoadOptions op = new DataLoadOptions();
op.LoadWith<Order>(o => o.OrderDetails);
db.LoadOptions = op;
var query = from o in db.GetTable<Order>()
select o;
foreach(Order o in query)
{
//Order details are eager loaded; additional queries are not needed
foreach(OrderDetail d in o.OrderDetails)
{
//do something
}
}
обратите внимание, что: Отложенное выполнение - это функция LINQ , но Отложенная загрузка - этоФункция LINQ to SQL