Partager via


Procédure : exécuter directement des requêtes SQL (LINQ to SQL)

Mise à jour : November 2007

LINQ to SQL traduit les requêtes que vous écrivez dans les requêtes SQL paramétrées (sous forme textuelle) et les envoie au serveur SQL pour traitement.

SQL ne peut pas exécuter les diverses méthodes qui peuvent être localement disponibles pour votre application. LINQ to SQL essaie de convertir ces méthodes locales en opérations et fonctions équivalentes qui sont disponibles à l'intérieur de l'environnement SQL. La plupart des méthodes et opérateurs sur les types intégrés .NET Framework ont des traductions directes en commandes SQL. Certains peuvent être produits à partir des fonctions disponibles. Ceux qui ne peuvent pas être produits génèrent des exceptions runtime. Pour plus d'informations, consultez Mappage de type SQL-CLR (LINQ to SQL).

Dans les cas où une requête LINQ to SQL est insuffisante pour une tâche spécialisée, vous pouvez utiliser la méthode ExecuteQuery pour exécuter une requête SQL, puis convertir directement le résultat de votre requête en objets.

Exemple

Dans l'exemple suivant, supposons que les données de la classe Customer sont réparties sur deux tables (customer1 et customer2). La requête retourne une séquence d'objets Customer.

Dim db As New Northwnd("c:\northwnd.mdf")
Dim results As IEnumerable(Of Customer) = _
    db.ExecuteQuery(Of Customer) _
    ("SELECT c1.custID as CustomerID," & _
    "c2.custName as ContactName" & _
    "FROM customer1 AS c1, customer2 as c2" & _
    "WHERE c1.custid = c2.custid")
Northwnd db = new Northwnd(@"c:\northwnd.mdf");
IEnumerable<Customer> results = db.ExecuteQuery<Customer>
(@"SELECT c1.custid as CustomerID, c2.custName as ContactName
    FROM customer1 as c1, customer2 as c2
    WHERE c1.custid = c2.custid"
);

Tant que les noms de colonne des résultats sous forme de tableau correspondent aux propriétés des colonnes de votre classe d'entité, LINQ to SQL crée vos objets à partir de n'importe quelle requête SQL.

La méthode ExecuteQuery autorise également les paramètres. Utilisez un code similaire à l'exemple de code suivant pour exécuter une requête paramétrée.

    Dim db As New Northwnd("c:\northwnd.mdf")
    Dim results As IEnumerable(Of Customer) = _
db.ExecuteQuery(Of Customer) _
("SELECT contactname FROM customers WHERE city = {0}, 'London'")
Northwnd db = new Northwnd(@"c:\northwnd.mdf");
IEnumerable<Customer> results = db.ExecuteQuery<Customer>
    ("SELECT contactname FROM customers WHERE city = {0}",
    "London");

Les paramètres sont exprimés dans le texte de requête en utilisant la même notation avec accolades utilisée par Console.WriteLine() et String.Format(). En fait, String.Format() est réellement appelé sur la chaîne de requête que vous fournissez, en substituant les paramètres entre accolades par des noms de paramètre générés tels @p0, @p1 …, @p(n).

Voir aussi

Autres ressources

Informations générales (LINQ to SQL)

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