Procedura: controllare la quantità di dati correlati recuperataHow to: Control How Much Related Data Is Retrieved

Usare il metodo LoadWith per specificare quali dati correlati alla destinazione principale devono essere recuperati contemporaneamente.Use the LoadWith method to specify which data related to your main target should be retrieved at the same time. Ad esempio, se le informazioni necessarie sono relative agli ordini dei clienti, è possibile usare LoadWith per assicurarsi che le informazioni sugli ordini vengano recuperate contestualmente alle informazioni sui clienti.For example, if you know you will need information about customers' orders, you can use LoadWith to make sure that the order information is retrieved at the same time as the customer information. Questo approccio comporta un solo accesso al database per entrambi i set di informazioni.This approach results in only one trip to the database for both sets of information.

Nota

È possibile recuperare dati riferiti alla destinazione principale della query recuperando un prodotto incrociato come una proiezione estesa, ad esempio gli ordini quando la destinazione della query sono i clienti.You can retrieve data related to the main target of your query by retrieving a cross-product as one large projection, such as retrieving orders when you target customers. Questo approccio, tuttavia, presenta spesso svantaggi.But this approach often has disadvantages. Ad esempio, i risultati sono solo proiezioni e non entità che possono essere modificate ed essere salvate in modo permanente da LINQ to SQLLINQ to SQL.For example, the results are just projections and not entities that can be changed and persisted by LINQ to SQLLINQ to SQL. Inoltre è possibile che vengano recuperate grandi quantità di dati non necessari.And you can be retrieving lots of data that you do not need.

EsempioExample

Nell'esempio seguente tutti gli oggetti Orders di tutti gli oggetti Customers residenti nell'area londinese vengono recuperati quando viene eseguita la query.In the following example, all the Orders for all the Customers who are located in London are retrieved when the query is executed. Di conseguenza, l'accesso successivo alla proprietà Orders su un oggetto Customer non avvia una nuova query di database.As a result, successive access to the Orders property on a Customer object does not trigger a new database query.

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

Vedere ancheSee Also

Esecuzione di query sul databaseQuerying the Database