Udostępnij za pośrednictwem


Jak: rozszerzenie kwerendy przy użyciu kodu

Jeśli chcesz zmodyfikować zapytanie poza możliwościami projektanta zapytań, możesz rozszerzyć zapytania przez napisanie kodu.

Visual Studio LightSwitch łączy warunki, które zostały zdefiniowane w projektancie zapytań z warunkami zdefiniowanymi w kodzie, w celu uzyskania wyniku zapytania.Aby uzyskać więcej informacji, zobacz Kwerendy: Pobieranie informacji ze źródła danych.

[!UWAGA]

Nie można rozszerzyć zapytania ekranu.Można rozszerzyć tylko te zapytania, które pojawiają się w Eksploratorze rozwiązań.Aby uzyskać więcej informacji dotyczących edytowania zapytania ekranu, zobacz Porady: filtrowanie danych na ekranie technologii Silverlight.

Aby rozszerzyć zapytanie przy użyciu kodu

  1. Otwórz zapytanie w Projektancie zapytań.Aby uzyskać więcej informacji, zobacz Jak: dodawania, usuwania i modyfikowania kwerendy.

  2. W oknie Właściwości kliknij Edytuj dodatkowy kod zapytania.

    Plik kodu serwera zostanie otwarty w edytorze kodu.Metoda, która reprezentuje zapytanie, pojawia się w pliku kodu.Nazwa metody rozpoczyna się od nazwy zapytania i kończy się wyrazem _PreprocessQuery.Na przykład, jeśli nazwa zapytania to GetCustomers, to nazwa metody, która pojawia się w edytorze kodu, to GetCustomers_PreprocessQuery.

  3. Dostosuj zapytanie przez dodanie kodu do tej metody.Użyj składni LINQ.Aby uzyskać ogólne informacje na temat pisania zapytań LINQ w Visual Basic, zobacz Wprowadzenie do programu LINQ w języku Visual Basic.Aby uzyskać ogólne informacje na temat pisania zapytań w C#, zobacz Wprowadzenie do programu LINQ w C#.

Przykłady

Następujące przykłady przedstawiają dwa sposoby modyfikowania zapytania przy użyciu kodu.

Ff852040.collapse_all(pl-pl,VS.110).gifPierwszych N klientów w oparciu o zamówienia sprzedaży

Następujące zapytanie zwraca klientów, którzy złożyli największą liczbę zamówień.Parametr o nazwie TopN zostanie przekazany do metody.Parametr TopN określa liczbę klientów zwracanych w wyniku.

[!UWAGA]

Dodaj parametr w Projektancie zapytań.

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

Nie można zaprojektować tego zapytania przy użyciu projektanta zapytań z następujących powodów:

  • Zamówienia są wyświetlane po stronie wielu relacji zamówienie-klient.Projektant zapytań uniemożliwia odnoszenie się do jednostek powiązanych, które mają liczebność wiele.

  • Zapytanie zlicza zamówienia za pomocą operacji Count.Projektant zapytań nie obsługuje operacji takich jak Count, Aggregate i Sum.

Ff852040.collapse_all(pl-pl,VS.110).gifWszyscy klienci, którzy zakupili określony produkt

Następujące zapytanie zwraca wszystkich klientów, którzy zakupili określony produkt, przechodząc przez kilka relacji jeden do wielu.

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

Nie można zaprojektować tego zapytania za pomocą projektanta zapytań, ponieważ uniemożliwia on odwoływanie się do jednostek powiązanych, które mają liczebność wiele.

Następne kroki

Aby dowiedzieć się, jak zaprojektować wizualnie zapytania, zobacz Jak: projektowania kwerendy przy użyciu projektanta kwerend.

Aby dowiedzieć się, jak użyć zapytania na ekranie, zobacz Porady: filtrowanie danych na ekranie technologii Silverlight.

Aby dowiedzieć się, jak uruchomić zapytanie w kodzie niestandardowym, który został dodany do aplikacji, zobacz Jak: pobrać dane z kwerendy przy użyciu kodu.

Zobacz też

Zadania

Jak: dodawania, usuwania i modyfikowania kwerendy

Inne zasoby

Kwerendy: Pobieranie informacji ze źródła danych

Wprowadzenie do programu LINQ w C#

Wprowadzenie do programu LINQ w języku Visual Basic

LINQ w języku Visual Basic