Exportar (0) Imprimir
Expandir todo

Aplicar consultar LINQ a EntityDataSource

Este tema describe cómo filtrar datos en el control EntityDataSource en tiempo de ejecución utilizando consultas LINQ.

Desde la versión 4 de .NET Framework, el control EntityDataSource admite el control QueryExtender, que se usa para crear filtros para los datos que se recuperan de un origen de datos. El control extensor de consulta puede filtrar los datos del marcado de una página web utilizando la sintaxis declarativa. Para obtener más información, vea Aplicar consultar LINQ a EntityDataSource. El control EntityDataSource también le permite filtrar datos aplicando consultas LINQ to Entities mediante programación encima de la clase ObjectQuery<T> que está asociada a EntityDataSource implementando el controlador de eventos QueryCreated. Para filtrar datos mediante programación, no necesita agregar el control QueryExtender a la página. Se creará el control extensor de consulta cuando el evento[ E:System.Web.UI.WebControls.EntityDataSource.QueryCreated] del control EntityDataSource devuelve una consulta diferente de la que se pasó al evento.

Puede establecer una consulta LINQ para especificar filtrado adicional en tiempo de ejecución en el control EntityDataSource, implementando el controlador de eventos EntityDataSource.QueryCreated. El evento QueryCreated se produce después de que EntityDataSource termina de crear una consulta de Entity SQL que se especificó durante la configuración del control EntityDataSource. Para aplicar la consulta LINQ encima de la consulta original proporcionada por el control EntityDataSource, asigne la consulta LINQ al parámetro e.Query que se pasa al controlador de eventos. El tipo de resultado de la consulta que asigna al parámetro e.Query tiene que ser del mismo tipo que el tipo de valor devuelto que se especifica durante la creación del control, de lo contrario se producirá una excepción.

En el siguiente ejemplo, un cuadro de lista se enlaza al control EntityDataSource y el evento onquerycreated se vincula al controlador de eventos EntityDataSource1_QueryCreated.

<asp:ListBox ID="ListBox1" runat="server" DataSourceID="EntityDataSource1" 
    DataTextField="SalesOrderID" DataValueField="SalesOrderID"></asp:ListBox>
<asp:EntityDataSource ID="EntityDataSource1" runat="server" 
    ConnectionString="name=AdventureWorksEntities" 
    DefaultContainerName="AdventureWorksEntities" EnableFlattening="False" 
    EntitySetName="SalesOrderHeaders" 
    onquerycreated="EntityDataSource1_QueryCreated">
</asp:EntityDataSource>

El controlador de eventos, al implementar el evento QueryCreated, agrega una consulta LINQ al control EntityDataSource que muestra pedidos que tienen identificadores menores de 43661:

protected void EntityDataSource1_QueryCreated(object sender, QueryCreatedEventArgs e)
{
    var orders = e.Query.Cast<SalesOrderHeader>();
    e.Query = from order in orders
        where order.SalesOrderID < 43661
        select order;  
}

El control EntityDataSource aplicará las expresiones de ordenación y paginación del control de cuadro de lista enlazado a datos a los datos cuando se ejecuten las consultas LINQ y Entity SQL.

La ordenación de los resultados se basa en tres orígenes diferentes, que se aplican en la siguiente secuencia:

  • La propiedad OrderBy o AutoGenerateOrderByClause de EntityDataSource.

  • La ordenación especificada en una consulta LINQ o QueryExtender durante QueryCreated.

  • La clasificación solicitada en la expresión de ordenación de un control enlazado a datos.

Dado que cada nueva especificación de ordenación que se aplica a una consulta invalida cualquier especificación de ordenación anterior, solo la última especificación de ordenación de la secuencia afectará a los resultados, y cualquier operación de paginación se aplicará después.

Adiciones de comunidad

Mostrar:
© 2014 Microsoft