Partager via


Projections de données (EntityDataSource)

Mise à jour : novembre 2007

Vous pouvez projeter des propriétés spécifiques à partir des objets qu'un contrôle EntityDataSource retourne à l'aide de la propriété Select. La propriété Select du contrôle EntityDataSource contient une chaîne qui représente l'instruction SELECT d'une requête Entity SQL. Cette chaîne est passée, sans modification, au ObjectQuery<T> qui, en cas d'exécution, retourne les données au contrôle EntityDataSource. La chaîne fournie à la propriété Select utilise le même format que celle passée à la méthode Select de ObjectQuery<T>. Pour des exemples décrivant comment utiliser la clause SELECT pour définir une projection pour une requête, consultez Procédure : exécuter une requête qui retourne un type anonyme).

Remarque :

Les mises à jour ne sont pas prises en charge pour les données projetées. Lorsque vous utilisez la propriété Select pour spécifier une projection, la liaison de données ne prend pas en charge les mises à jour.

Le balisage XML suivant utilise la propriété Select pour spécifier une projection avec six des propriétés du type Product :

<asp:EntityDataSource ID="ProductDataSource"  
    ConnectionString="name=AdventureWorksEntities" 
    DefaultContainerName="AdventureWorksEntities" 
    EntitySetName="Product" OrderBy="it.ProductID" 
    Select="it.ProductID, it.Name, it.ListPrice, 
    it.Size, it.Style, it.Weight">
</asp:EntityDataSource> 

L'exemple XML précédent est identique au ObjectQuery<T> suivant nommé products :

ObjectQuery<Product> products = context.Product
    .Select(it.ProductID, it.Name, it.ListPrice, 
      it.Size, it.Style, it.Weight)
    .OrderBy("it.ProductID");

Passage de paramètres

À l'instar de la méthode Select de la classe ObjectQuery<T>, vous pouvez passer des paramètres à la projection que la propriété Select définit. Vous devez définir la propriété SelectParameters du contrôle EntityDataSource pour spécifier un ParameterCollection pour l'instruction SELECT de la requête. La propriété SelectParameters utilise des arguments nommés pour faire référence aux paramètres dans la propriété Select.

Si vous ne définissez pas la propriété SelectParameters, aucune substitution de paramètres n'est effectuée. Tous les noms de paramètres dans l'instruction SELECT, 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.

L'exemple suivant applique une remise de 90 % à chaque Product dans la requête en utilisant un paramètre sur l'une des projections de propriété.

<asp:EntityDataSource ID="EntityDataSource6" 
        EnableViewState="False"
        EntitySetName="Products" 
        ConnectionString="name=NorthwindContext" 
        DefaultContainerName="NorthwindContext" 
        EntityTypeFilter="Products" 
        Select="it.ProductID, it.UnitsInStock, it.ProductName,
              it.UnitPrice * @Discount as UnitPrice,
              it.UnitsOnOrder as UnitsOnOrder, it.Discontinued" 
        Where="it.ProductID < 10" 
    >
    <SelectParameters>
        <asp:Parameter Name="Discount" DefaultValue=".90"
             Type="Decimal" />
    </SelectParameters>
</asp:EntityDataSource>

Voir aussi

Concepts

Concepteur EntityDataSource

Autres ressources

Sélection de données à l'aide du contrôle EntityDataSource

Requêtes d'objet (Entity Framework)