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
Abra una consulta en el Diseñador de consultas. Para obtener más información, vea Cómo: Agregar, quitar y modificar una consulta.
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.
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