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

Consulte também