Compartir a través de


Cómo: Extender una consulta usando código

Si desea modificar una consulta a fin de disponer de más funcionalidades que las del diseñador de consultas, puede extender la consulta escribiendo código.

Visual Studio LightSwitch combina las condiciones que se especifican en el diseñador de consultas con las indicadas en el código para generar el resultado de la consulta. Para obtener más información, vea Consultas: Recuperar información de un origen de datos.

Nota

La consulta de una pantalla no se puede extender.Solo pueden extenderse las consultas que aparecen en el Explorador de soluciones.Para obtener más información sobre cómo editar la consulta de una pantalla, vea Cómo: Filtrar datos en una pantalla de Silverlight.

Para extender una consulta mediante código

  1. Abra una consulta en el Diseñador de consultas. Para obtener más información, vea Cómo: Agregar, quitar y modificar una consulta.

  2. En la ventana Propiedades, haga clic en Editar el código de consulta adicional.

    Se abre el archivo de código del servidor en el Editor de código. Aparece un método que representa su consulta en el archivo de código. El nombre del método se inicia con el nombre de la consulta y finaliza con palabra _PreprocessQuery. Por ejemplo, si el nombre de la consulta es GetCustomers, el nombre del método que aparece en el editor de código es GetCustomers_PreprocessQuery.

  3. Personalice la consulta agregando código a este método. Utilice la sintaxis LINQ. Para obtener más información sobre cómo escribir consultas LINQ en Visual Basic, vea Introducción a LINQ en Visual Basic. Para obtener más información sobre cómo escribir consultas en C#, vea Introducción a LINQ en C#.

Ejemplos

En los siguientes ejemplos se muestran dos formas de modificar una consulta mediante código.

Los N mejores clientes en función de los pedidos de ventas

En la siguiente consulta se devuelven los clientes que han realizado el mayor número de pedidos. Se pasa un parámetro llamado TopN al método. El parámetro TopN especifica el número de clientes que se van devolver en el resultado.

Nota

Agregue parámetros en el diseñador de consultas.

Private Sub TopNSalesOrders_PreprocessQuery _
    (ByVal TopN As System.Nullable(Of Short), _
     ByRef query As System.Linq.IQueryable(Of LS_Queries_VB.Customer))
    query = From myCustomer In query
           Where myCustomer.Orders.Count > 0
           Select myCustomer
           Order By myCustomer.Orders.Count Descending
           Take (TopN)
End Sub
partial void TopNSalesOrders_PreprocessQuery
    (short? TopN, ref IQueryable<Customer> query)
{
    query = (from myCustomer in query
             where myCustomer.Orders.Count() > 0
             orderby myCustomer.Orders.Count() descending 
             select myCustomer).Take(System.Convert.ToInt16(TopN));
}

Esta consulta no se puede diseñar con el diseñador de consultas por las siguientes razones:

  • Los pedidos aparecen en la sección de "muchos" de la relación cliente-pedido. El diseñador de consultas impide hacer referencia a las entidades relacionadas que tienen una multiplicidad de muchos.

  • La consulta cuenta los pedidos mediante la operación Count. El diseñador de consultas no admite el uso de operaciones como Count, Aggregate o Sum.

Todos los clientes que han adquirido un producto concreto

En la siguiente consulta se devuelven todos los clientes que adquirieron un producto concreto mediante la navegación por varias relaciones de uno a muchos.

Private Sub CustomersWhoBoughtProduct_PreprocessQuery _
    (ByVal ProductID As System.Nullable(Of Short), _
     ByRef query As System.Linq.IQueryable(Of LS_Queries_VB.Customer))
    query = From myCustomers In query
        From myOrders In myCustomers.Orders
        From myOrderDetails In myOrders.Order_Details
        Where myOrderDetails.Product.ProductID = ProductID
        Select Customers
End Sub
partial void CustomersWhoBoughtProduct_PreprocessQuery
    (short? ProductID, ref IQueryable<Customer> query)
{
    query = from myCustomers in query
            from myOrders in myCustomers.Orders
            from myOrderDetails in myOrders.Order_Details
            where myOrderDetails.Product.ProductID == ProductID
            select myCustomers;
}

Esta consulta no se puede diseñar con el diseñador de consultas porque el diseñador impide hacer referencia a las entidades relacionadas que tienen una multiplicidad de muchos.

Pasos siguientes

Para obtener información acerca de cómo diseñar una consulta visualmente, vea Cómo: Diseñar una consulta usando el Diseñador de consultas.

Para obtener información acerca de cómo utilizar una consulta en una pantalla, vea Cómo: Filtrar datos en una pantalla de Silverlight.

Para obtener información acerca de cómo ejecutar una consulta dentro del código personalizado que se agrega a una aplicación, vea Cómo: Recuperar datos de una consulta usando código.

Vea también

Tareas

Cómo: Agregar, quitar y modificar una consulta

Otros recursos

Consultas: Recuperar información de un origen de datos

Introducción a LINQ en C#

Introducción a LINQ en Visual Basic

LINQ en Visual Basic