Jak: dotaz rozšířit pomocí kódu
Chcete-li upravit dotaz způsoby, které překračují možnosti návrháře dotazu, můžete dotaz rozšířit napsáním kódu.
Visual Studio LightSwitch kombinuje podmínky, které určíte v Návrháři dotazu, s podmínkami zadanými v kódu pro získání výsledku dotazu.Další informace naleznete v tématu Dotazy: Načítání informací ze zdroje dat.
[!POZNÁMKA]
Dotaz obrazovky nelze rozšířit.Lze rozšířit pouze dotazy, které se zobrazují v Průzkumníku řešení.Další informace o úpravách dotazu obrazovky viz Postupy: Filtrování dat na obrazovce aplikace Silverlight
Rozšíření dotazu pomocí kódu
Otevřete dotaz v Návrháři dotazu.Další informace naleznete v tématu Jak: přidat, odebrat a upravit dotaz.
V okně Vlastnosti klikněte na položku Upravit kód dalšího dotazu.
Soubor kódu serveru se otevře v editoru kódu.Metoda, která představuje dotaz, se zobrazí v souboru kódu.Název metody začíná názvem dotazu a končí slovem _PreprocessQuery.Pokud je například název dotazu GetCustomers, bude název metody, která se zobrazí v editoru kódu GetCustomers_PreprocessQuery.
Dotaz přizpůsobte přidáním kódu k této metodě.Použijte syntaxi LINQ.Další informace o způsobu psaní dotazů LINQ v jazyce Visual Basic naleznete v tématu Začínáme s LINQ v jazyce Visual Basic.Další informace o tom, jak psát dotazy v jazyce C#, naleznete v tématu Začínáme s LINQ v jazyce C#.
Příklady
V následujících příkladech jsou uvedeny dva způsoby úprav dotazu pomocí kódu.
Nejvýznamnějších N zákazníků na základě prodejních objednávek
Následující dotaz vrátí zákazníky, kteří zadali největší počet objednávek.Parametr s názvem TopN bude předán do metody.Parametr TopN určuje počet zákazníků pro vrácení ve výsledku.
[!POZNÁMKA]
Přidání parametrů v Návrháři dotazu
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));
}
Tento dotaz nelze navrhovat pomocí Návrháře dotazu z následujících důvodů:
Objednávky se objevují na mnoha místech v rámci relace zákazník-objednávka.Návrhář dotazu znemožní odkazování na související entity, které jsou mnohonásobné.
Dotaz počítá objednávky pomocí operace Count.Návrhář dotazu nepodporuje použití operací, jako je například Count, Aggregate a Sum.
Všichni zákazníci, kteří koupili určitý produkt
Následující dotaz vrátí pomocí navigace několika relací 1:N všechny zákazníky, kteří zakoupili určitý produkt.
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;
}
Tento dotaz nelze navrhovat pomocí Návrháře dotazu, protože Návrhář dotazu zabrání odkazování na související entity, které jsou mnohonásobné.
Další kroky
Informace o vizuálním návrhu dotazu naleznete v tématu Jak: návrhu dotazu pomocí Návrháře dotazu.
Informace o použití dotazu na obrazovce získáte v tématu Postupy: Filtrování dat na obrazovce aplikace Silverlight.
Informace o spuštění dotazu v rámci vlastního kódu, který přidáte do aplikace, získáte v tématu Jak: načíst Data z dotazu pomocí kódu.
Viz také
Úkoly
Jak: přidat, odebrat a upravit dotaz
Další zdroje
Dotazy: Načítání informací ze zdroje dat