Например, если у вас есть клиент в ObjectContext и вы хотите получить его
При бронировании клиента вы можете позвонить по следующему номеру:
myCust.Reservations.Load()
Это загрузит все резервирования для этого клиента.
Однако, если вы хотите отфильтровать эти резервирования, вы можете использовать CreateSourceQuery в
вместо, как показано в следующем коде:
var customer=context.Contacts.OfType<Customer>().First();
var sourceQuery = customer.Reservations.CreateSourceQuery()
.Where(r => r.ReservationDate > new DateTime(2008, 1, 1));
customer.Reservations.Attach(sourceQuery);
Запрос будет выполнен при вызове метода Attach. Теперь только часть резервирований для этого клиента будет извлечена из базы данных и материализована как
объекты.
Вы также можете использовать CreateSourceQuery для фильтрации по типам. В следующем коде Attach is
используется с EntityReference, который не будет принимать IQueryable. Вместо этого вам нужно
передать объект, который вы можете получить с помощью метода запроса FirstOrDefault. поскольку
Attach выдаст исключение, если вы попытаетесь передать значение NULL, вам нужно проверить на NULL
перед звонком Прикрепить:
var addresses = context.Addresses.Take(5);
foreach (var a in addresses)
{
var sq = a.ContactReference.CreateSourceQuery()
.OfType<Customer>().FirstOrDefault();
if (sq != null)
a.ContactReference.Attach(sq);
}
С этим кодом будут загружаться только клиенты.