Partager via


Filtrage des données (EntityDataSource)

Mise à jour : novembre 2007

La propriété Where du contrôle EntityDataSource est une chaîne qui représente une clause WHERE qui est le prédicat d'une requête Entity SQL. Cette chaîne est passée, sans modification, à un ObjectQuery<T> exécuté par Object Services. Cette requête est la source des données réglées par le contrôle EntityDataSource. La chaîne fournie à la propriété Where utilise le même format que celle passée à la méthode Where de ObjectQuery<T>. Pour obtenir des exemples d'utilisation de la clause WHERE pour filtrer une requête, consultez Comment : filtrer des données (Entity Framework).

Passage de paramètres

À l'instar de la méthode Where de la classe ObjectQuery<T>, les paramètres peuvent être passés au prédicat assigné à la propriété Where. La propriété WhereParameters du contrôle EntityDataSource spécifie un ParameterCollection qui contient les paramètres à fournir à la clause WHERE de la requête. La propriété WhereParameters utilise des arguments nommés pour faire référence aux paramètres spécifiés dans la chaîne fournie à la propriété Where.

Si la propriété WhereParameters n'est pas définie, aucune substitution de paramètres n'est effectuée. Tous les noms de paramètres dans la clause WHERE, préfixés par le symbole « @ »,doivent avoir un nom correspondant dans ParameterCollection. Les valeurs Null ne sont pas autorisées pour les paramètres d'un ParameterCollection.

Exemple

Le balisage XML de l'exemple suivant, dans un fichier .aspx, récupère une valeur à partir d'un contrôle et la passe en tant que paramètre à la propriété Where.

<asp:EntityDataSource ID="SalesOrderHeader"  
  ConnectionString="name=AdventureWorksEntities" 
  DefaultContainerName="AdventureWorksEntities" EnableDelete="True" 
  EnableInsert="True" EnableUpdate="True" EntitySetName="SalesOrderHeader" 
  EntityTypeFilter="" OrderBy="it.TotalDue DESC" Select="" 
   Where="it.OnlineOrderFlag = TRUE AND it.TotalDue &gt; @ordercost">
  <WhereParameters>
    <asp:ControlParameter ControlID="costLimit" DbType="Int32" 
      DefaultValue="2500" Name="ordercost" PropertyName="Text" />
  </WhereParameters>
</asp:EntityDataSource>

L'exemple XML précédent est équivalent au ObjectQuery<T>suivant, nommé onlineOrders :

ObjectQuery<SalesOrderHeader> onlineOrders =
      context.SalesOrderHeader
       .Where("it.OnlineOrderFlag = TRUE AND it.TotalDue > @ordercost",
         new ObjectParameter("ordercost", orderCost))
        .OrderBy("it.TotalDue DESC");

Génération automatique de la clause WHERE

Lorsque la propriété AutoGenerateWhereClause du contrôle EntityDataSource a la valeur true, le contrôle génère automatiquement une clause WHERE à partir des paramètres dans le ParameterCollection assigné à la propriété WhereParameters. Cela évite d'avoir à assigner explicitement une clause WHERE à la propriété Where. La construction de la clause WHERE à partir de la propriété WhereParameters requiert que la propriété Name de chaque paramètre dans la collection identifie une propriété unique de l'élément retourné par la requête.

Exemple

L'exemple suivant suppose qu'une case à cocher définit l'indicateur d'ordre en ligne :

<asp:EntityDataSource ID="SalesOrderHeader"  
    ConnectionString="name=AdventureWorksEntities" 
    DefaultContainerName="AdventureWorksEntities" EnableDelete="True" 
    EnableInsert="True" EnableUpdate="True" EntitySetName="SalesOrderHeader" 
    EntityTypeFilter="" Select="" AutoGenerateWhereClause="True">
    <WhereParameters>
        <asp:ControlParameter ControlID="onlineOrder" DefaultValue="true" 
            Name="OnlineOrderFlag" PropertyName="Text" DbType="Boolean" />
    </WhereParameters>
</asp:EntityDataSource>

Voir aussi

Concepts

Configuration du contrôle EntityDataSource

Concepteur EntityDataSource

Autres ressources

Vue d'ensemble d'Object Services (Entity Framework)

Méthodes du Générateur de requêtes (Entity Framework)