Share via


Utilisation de LINQ avec ASP.NET

Mise à jour : novembre 2007

Vous pouvez utiliser LINQ (Language-Integrated Query) dans les pages Web pour récupérer et modifier des données. LINQ applique les principes de programmation orientée objet aux données relationnelles. Il fournit un modèle de programmation unifié pour interroger les données de différents types de sources de données et étend directement les fonctions de données des langages C# et Visual Basic. Pour plus d'informations, consultez LINQ (Language-Integrated Query).

Vous pouvez utiliser LINQ via le contrôle LinqDataSource ou ObjectDataSource, ou bien en créant des requêtes LINQ.

Lorsque vous utilisez LINQ dans une application Web, vous êtes susceptible de devoir modifier la sécurité d'accès du code des fichiers de stratégie. Ces modifications sont décrites plus loin dans cette rubrique.

Contrôle LinqDataSource

Le contrôle LinqDataSource offre un moyen facile de se connecter aux données d'une base de données ou à une collecte de données en mémoire telle qu'un tableau. Vous pouvez écrire de façon déclarative toutes les conditions requises pour les scénarios classiques tels que la récupération, le filtrage, le classement et le regroupement des données. Le contrôle crée les requêtes LINQ de manière dynamique à partir des valeurs que vous fournissez de façon déclarative.

Lorsque vous récupérez les données d'une classe de contexte de données LINQ to SQL, vous pouvez également configurer un contrôle LinqDataSource pour gérer les opérations de mise à jour, d'insertion et de suppression. Le contrôle s'en charge sans que vous ayez besoin d'écrire les commandes SQL pour effectuer ces tâches.

Pour afficher les données d'une page Web, attachez un contrôle lié aux données au contrôle LinqDataSource. Les contrôles GridView et DetailsView sont des exemples de contrôles liés aux données.

L'exemple suivant illustre le balisage d'un contrôle LinqDataSource qui se connecte à la base de données AdventureWorks. Il retourne des enregistrements de la table Contact qui ont une valeur dans la propriété EmailPromotion équivalente à 1.

<asp:LinqDataSource 
    ContextTypeName="AdventureWorksDataContext" 
    TableName="Contacts" 
    Where="EmailPromotion=1"
    ID="LinqDataSource1" 
    >
</asp:LinqDataSource>

Pour plus d'informations, consultez Vue d'ensemble du contrôle serveur Web LinqDataSource.

Contrôle ObjectDataSource

Utilisez le contrôle ObjectDataSource lorsque vous souhaitez interagir avec les données de manière plus complexe qu'avec le contrôle LinqDataSource. Par exemple, vous pouvez créer une méthode de mise à jour qui inclut des valeurs de paramètre dans les tables jointes.

Vous pouvez utiliser le contrôle ObjectDataSource avec une classe LINQ to SQL. Pour ce faire, affectez le nom de la classe de contexte de données à la propriété TypeName. Vous pouvez également affecter les méthodes SelectMethod, UpdateMethod, InsertMethod et DeleteMethod aux méthodes de la classe de contexte de données qui effectuent les opérations correspondantes.

Lorsque vous utilisez l'exécution de la requête différée avec le contrôle ObjectDataSource, vous devez créer un gestionnaire d'événements pour l'événement ObjectDisposing afin d'annuler la suppression de la classe de contexte de données. Cette étape est nécessaire car la classe LINQ to SQL prend en charge l'exécution différée, tandis que le contrôle ObjectDataSource tente de supprimer le contexte de données après l'opération Select.

Requêtes LINQ

Vous pouvez inclure des requêtes LINQ dans une page Web sans utiliser de contrôle de source de données. Vous pouvez utiliser une requête LINQ si vous devez utiliser un opérateur de requête qui n'est pas disponible dans le contrôle LinqDataSource. Vous pouvez également l'utiliser si vous souhaitez afficher des données en lecture seule dans un contrôle lié aux données sans le traitement requis pour créer un contrôle de source de données. Pour plus d'informations sur les opérateurs LINQ, consultez Vue d'ensemble des opérateurs de requête standard. Pour obtenir une liste des opérateurs de requête qui sont disponibles dans le contrôle LinqDataSource, consultez Vue d'ensemble du contrôle serveur Web LinqDataSource.

L'exemple suivant indique comment inclure une requête LINQ dans une page Web. L'exemple affiche les résultats de la requête dans un contrôle GridView.

[Visual Basic]

Protected Sub Page_Load(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles Me.Load
    If Not IsPostBack Then
        Dim dataContext As AdventureWorksDataContext = _
            New AdventureWorksDataContext()
        Dim query = From contact In dataContext.Contacts _
          Where contact.EmailPromotion = 1 _
          Select contact

        GridView1.DataSource = query
        GridView1.DataBind()
    End If
End Sub

[C#]

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        AdventureWorksDataContext dataContext = 
            new AdventureWorksDataContext();

        var query = from contact in dataContext.Contacts
          where contact.EmailPromotion==1
          select contact;

        GridView1.DataSource = query;
        GridView1.DataBind();
    }
}

Sécurité LINQ et sécurité d'accès du code

Les sections suivantes fournissent des informations relatives à l'utilisation de LINQ selon un niveau de confiance moyen et élevé.

Utilisation de LINQ selon un niveau de confiance moyen

Pour utiliser LINQ dans une application Web qui s'exécute selon un niveau de confiance moyen, vous devez inclure deux éléments dans le fichier de stratégie défini pour le niveau de confiance Medium. Par défaut, le fichier web_mediumtrust.config est le fichier de stratégie du niveau de confiance moyen.

Dans l'élément SecurityClasses, ajoutez un élément SecurityClass qui dispose des attributs suivants :

<SecurityClass 
  Name="ReflectionPermission" 
  Description="System.Security.Permissions.ReflectionPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>

Dans l'élément PermissionSet dont l'attribut Name a la valeur "ASP.NET", ajoutez un élément IPermission qui dispose des attributs suivants :

<IPermission
  class="ReflectionPermission"
  version="1"
  Flags="RestrictedMemberAccess"
/>
Remarque :

Les éléments ont peut-être été ajoutés pendant le processus d'installation.

Utilisation de LINQ selon un niveau de confiance élevé

Pour utiliser LINQ dans une application Web qui s'exécute selon un niveau de confiance élevé, vous devez inclure un élément dans le fichier de stratégie défini pour le niveau de confiance High. Par défaut, le fichier web_hightrust.config est le fichier de stratégie du niveau de confiance élevé. Ce fichier inclut déjà un élément IPermission dans un élément PermissionsSet qui référence la classe ReflectionPermission. Vous devez modifier cet élément lorsque vous utilisez LINQ.

Dans l'élément PermissionSet dont l'attribut Name a la valeur "ASP.NET", recherchez l'élément IPermission de ReflectionPermission et définissez-le comme suit :

<IPermission
  class="ReflectionPermission"
  version="1"
  Flags="ReflectionEmit, RestrictedMemberAccess"
/>
Remarque :

Cet élément a peut-être été modifié pendant le processus d'installation.

Voir aussi

Concepts

Vue d'ensemble du contrôle serveur Web LinqDataSource

Autres ressources

LINQ (Language-Integrated Query)