Compartir a través de


Cómo: Extender una consulta usando código

Si se desea modificar una consulta en formas que excedan las capacidades del diseñador de consultas, se puede extender la consulta mediante la escritura de código.

Visual Studio LightSwitch combina las condiciones que se especifiquen en el diseñador de consultas con las condiciones que se especifiquen 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]

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

Para ampliar una consulta mediante código

  1. Abrir 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.Utilizar 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 utilizando código.

Ff852040.collapse_all(es-es,VS.110).gifLos N mejores clientes basados en pedidos de ventas

La siguiente consulta devuelve los clientes que hayan realizado el mayor número de pedidos.Un parámetro con nombre TopN pasado al método.El parámetro TopN especifica el número de clientes que se van devolver en el resultado.

[!NOTA]

Agregar 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));
}

No puede diseñar esta consulta con el diseñador de consultas por las siguientes razones:

  • Los pedidos aparecen en los extremos de la relación de pedido del cliente.El diseñador de consultas evita hacer referencias 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 y Sum.

Ff852040.collapse_all(es-es,VS.110).gifTodos los clientes que han adquirido un producto concreto

La siguiente consulta devuelve todos los clientes que adquirieron un producto concreto navegando varias relaciones uno a varios.

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

No puede diseñar esta consulta con el diseñador de consultas porque el diseñador de consultas evita hacer referencia a las entidades con 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