Como: Controlar a quantidade de dados relacionados que são recuperados
Use o LoadWith método para especificar quais dados relacionados ao seu destino principal devem ser recuperados ao mesmo tempo. Por exemplo, se você sabe que precisará de informações sobre os pedidos dos clientes, você pode usar LoadWith para garantir que as informações do pedido sejam recuperadas ao mesmo tempo que as informações do cliente. Essa abordagem resulta em apenas uma viagem ao banco de dados para ambos os conjuntos de informações.
Nota
Você pode recuperar dados relacionados ao destino principal da sua consulta recuperando um produto cruzado como uma grande projeção, como a recuperação de pedidos quando você segmenta clientes. Mas esta abordagem tem muitas vezes desvantagens. Por exemplo, os resultados são apenas projeções e não entidades que podem ser alteradas e persistidas pelo LINQ to SQL. E você pode estar recuperando muitos dados que não precisa.
Exemplo
No exemplo a seguir, todos os Orders
para todos os Customers
que estão localizados em Londres são recuperados quando a consulta é executada. Como resultado, o Orders
acesso sucessivo à propriedade em um Customer
objeto não aciona uma nova consulta de banco de dados.
Northwnd db = new Northwnd(@"c:\northwnd.mdf");
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Customer>(c => c.Orders);
db.LoadOptions = dlo;
var londonCustomers =
from cust in db.Customers
where cust.City == "London"
select cust;
foreach (var custObj in londonCustomers)
{
Console.WriteLine(custObj.CustomerID);
}
Dim db As New Northwnd("c:\northwnd.mdf")
Dim dlo As DataLoadOptions = New DataLoadOptions()
dlo.LoadWith(Of Customer)(Function(c As Customer) c.Orders)
db.LoadOptions = dlo
Dim londonCustomers = _
From cust In db.Customers _
Where cust.City = "London" _
Select cust
For Each custObj In londonCustomers
Console.WriteLine(custObj.CustomerID)
Next