Sdílet prostřednictvím


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

  1. Otevřete dotaz v Návrháři dotazu.Další informace naleznete v tématu Jak: přidat, odebrat a upravit dotaz.

  2. 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.

  3. 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.

Ff852040.collapse_all(cs-cz,VS.110).gifNejvý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.

Ff852040.collapse_all(cs-cz,VS.110).gifVš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

Začínáme s LINQ v jazyce C#

Začínáme s LINQ v jazyce Visual Basic

LINQ v jazyce Visual Basic