Partager via


Procédure : contrôler la quantité de données liées récupérées (LINQ to SQL)

Mise à jour : November 2007

Utilisez la méthode LoadWith pour spécifier quelles données associées à votre cible principale doivent être récupérées simultanément. Par exemple, si vous savez que vous aurez besoin d'informations relatives aux commandes des clients, vous pouvez utiliser LoadWith pour vous assurer que les informations relatives aux commandes sont récupérées en même temps que les informations relatives au client. Cette approche permet de ne provoquer qu'un seul envoi à la base de données pour les deux ensembles d'informations.

Remarque :

Vous pouvez récupérer des données en rapport avec la cible principale de votre requête en récupérant un produit croisé sous forme d'une grande projection, par exemple en récupérant des commandes lorsque vous ciblez des clients. Cependant, cette approche présente souvent des inconvénients. Par exemple, les résultats sont uniquement des projections et non des entités qui peuvent être modifiées et être rendues persistantes par LINQ to SQL. Et vous pouvez récupérer une grande quantité de données dont vous n'avez pas besoin.

Exemple

Dans l'exemple suivant, toutes les Orders de tous les Customers dont la ville est London sont récupérés une fois la requête exécutée. Par conséquent, l'accès consécutif à la propriété Orders sur un objet Customer ne déclenche pas de nouvelle requête de base de données.

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
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);
}

Voir aussi

Autres ressources

Interrogation de la base de données (LINQ to SQL)