Filtrar datos (EntityDataSource)

Visual Studio 2010

Actualización: noviembre 2007

La propiedad Where del control EntityDataSource es una cadena que representa una cláusula WHERE que es el predicado de una consulta de Entity SQL. Esta cadena se pasa, sin modificaciones, a una clase ObjectQuery<T> que ejecutan los Servicios de objeto. Esta consulta es el origen de los datos regulados por el control EntityDataSource. La cadena suministrada a la propiedad Where usa el mismo formato que la cadena pasada al método Where de la clase ObjectQuery<T>. Para obtener ejemplos de cómo utilizar la cláusula WHERE para filtrar una consulta, vea Cómo: Filtrar datos (Entity Framework).

Al igual que el método Where de la clase ObjectQuery<T>, se pueden pasar parámetros al predicado asignado a la propiedad Where. La propiedad WhereParameters del control EntityDataSource especifica una clase ParameterCollection que contiene los parámetros que se deben proporcionar a la cláusula WHERE de la consulta. La propiedad WhereParameters utiliza argumentos con nombre para hacer referencia a los parámetros especificados en la cadena suministrada a la propiedad Where.

Si no se establece la propiedad WhereParameters, no se realiza ninguna sustitución de parámetros. Todos los nombres de parámetro de la cláusula WHERE, que tienen como prefijo el símbolo "@", deben tener un nombre coincidente en la clase ParameterCollection. No se permiten valores nulos para los parámetros de una clase ParameterCollection.

Código de

El formato XML del siguiente ejemplo, en un archivo .aspx, recupera un valor de un control y lo pasa como un parámetro a la propiedad Where.

<asp:EntityDataSource ID="SalesOrderHeader" runat="server" 
  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>

El ejemplo anterior de formato XML equivale a la siguiente clase ObjectQuery<T>, denominada onlineOrders:

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

Si la propiedad AutoGenerateWhereClause del control EntityDataSource se establece en true, éste genera automáticamente una cláusula WHERE a partir de los parámetros de la clase ParameterCollection asignada a la propiedad WhereParameters. Esto elimina la necesidad de asignar explícitamente una cláusula WHERE a la propiedad Where. La construcción de la cláusula WHERE a partir de la propiedad WhereParameters requiere que la propiedad Name de cada parámetro de la colección identifique una única propiedad del elemento devuelto por la consulta.

Código de

En el ejemplo siguiente se supone que una casilla establece el marcador de pedidos en línea:

<asp:EntityDataSource ID="SalesOrderHeader" runat="server" 
    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>

Adiciones de comunidad

AGREGAR
Mostrar: