Compartir a través de


Proyecciones de datos (EntityDataSource)

Actualización: noviembre 2007

Puede proyectar las propiedades específicas de los objetos que devuelve un control EntityDataSource mediante la propiedad Select. La propiedad Select del control EntityDataSource contiene una cadena que representa la instrucción SELECT de una consulta de Entity SQL. Esta cadena se pasa, sin modificaciones, a la clase ObjectQuery<T> que, cuando se ejecuta, devuelve los datos al control EntityDataSource. La cadena suministrada a la propiedad Select usa el mismo formato que la cadena pasada al método Select de la clase ObjectQuery<T>. Para obtener ejemplos de cómo utilizar la cláusula SELECT para definir una proyección de una consulta, vea Cómo: Ejecutar una consulta que devuelve un tipo anónimo (Entity Framework).

Nota:

No se admiten actualizaciones para los datos proyectados. Al utilizar la propiedad Select para especificar una proyección, el enlace de datos no admite actualizaciones.

El siguiente formato XML utiliza la propiedad Select para especificar una proyección con seis de las propiedades del tipo 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> 

El ejemplo XML anterior es igual que la siguiente consulta ObjectQuery<T> denominada products:

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

Pasar parámetros

Al igual que el método Select de la clase ObjectQuery<T>, puede pasar parámetros a la proyección que define la propiedad Select. Debe definir la propiedad SelectParameters del control EntityDataSource para especificar una clase ParameterCollection para la instrucción SELECT de la consulta. La propiedad SelectParameters utiliza argumentos con nombre para hacer referencia a los parámetros de la propiedad Select.

Si no define la propiedad SelectParameters, no se realiza ninguna substitución de parámetros. Todos los nombres de parámetro de la instrucción SELECT, que tienen como prefijo el símbolo "@", deben tener un nombre que coincida en la clase ParameterCollection. No se permiten valores nulos para los parámetros de una clase ParameterCollection.

En el ejemplo siguiente se aplica un 90% de descuento a cada Product de la consulta utilizando un parámetro en una de las proyecciones de la propiedad.

<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>

Vea también

Conceptos

Diseñador EntityDataSource

Otros recursos

Selección de datos mediante EntityDataSource

Consultas de objeto (Entity Framework)