Udostępnij za pośrednictwem


Wprowadzenie do zapytań LINQ (C#)

A kwerendy jest wyrażenie, które pobiera dane ze źródła danych.Kwerendy jest zwykle wyrażana w języku kwerend specjalistyczne.Różne języki zostały opracowane w czasie dla różnych typów źródeł danych, na przykład SQL relacyjnych baz danych i XQuery XML.W związku z tym programiści musieli nauczyć się nowego języka kwerend dla każdego typu źródła danych lub format danych, które organy te muszą wspierać.LINQsytuacja ta upraszcza oferując spójny model do pracy z danymi w różnego rodzaju źródeł danych i formaty.W LINQ kwerendy, zawsze pracy z obiektami.Użyj te same podstawowe schematy kodowania do kwerendy i przekształcenia danych w dokumentach XML, bazy danych SQL, ADO.NET zestawów danych, kolekcje .NET i jakiegokolwiek innego formatu, dla którego LINQ dostawca jest niedostępny.

Trzy części operacji kwerendy

Wszystkie LINQ operacji składają się z trzy odrębne działania kwerendy:

  1. Uzyskaj źródła danych.

  2. Utwórz kwerendę.

  3. Wykonanie kwerendy.

Poniższy przykład pokazuje, jak te trzy części operacji kwerendy są wyrażone w kodzie źródłowym.W przykładzie użyto tablicy liczby całkowitej jako źródło danych dla wygody; Jednak te same pojęcia dotyczą innych źródeł danych, również.W tym przykładzie jest określane w dalszej części tego tematu.

class IntroToLINQ
{        
    static void Main()
    {
        // The Three Parts of a LINQ Query:
        //  1. Data source.
        int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };

        // 2. Query creation.
        // numQuery is an IEnumerable<int>
        var numQuery =
            from num in numbers
            where (num % 2) == 0
            select num;

        // 3. Query execution.
        foreach (int num in numQuery)
        {
            Console.Write("{0,1} ", num);
        }
    }
}

Operacja pełnej kwerendy można znaleźć w poniższej ilustracji.W LINQ wykonanie kwerendy różni się od kwerendy; innymi słowy użytkownik nie pobrano żadnych danych tylko za pomocą zmiennej kwerendy.

Zakończyć operacja zapytania programu LINQ

Źródło danych

W poprzednim przykładzie, ponieważ źródło danych jest tablicą, niejawnie obsługuje on nazwę rodzajową IEnumerable<T> interfejsu.Fakt ten oznacza mogą być wyszukiwane z LINQ.Kwerenda jest wykonywana w foreach instrukcji, i foreach wymaga IEnumerable lub IEnumerable<T>. Typy obsługujące IEnumerable<T> lub interfejsu pochodnego, takie jak typowa IQueryable<T> są nazywane queryable typy.

Queryable typu nie wymaga modyfikacji lub specjalnego traktowania sluzacych jako LINQ źródło danych.Jeśli źródło danych nie jest jeszcze w pamięci jako typ queryable, LINQ musi być ona reprezentować jako takie w dostawcy.Na przykład LINQ to XML ładuje dokumentu XML do queryable XElement typu:

// Create a data source from an XML document.
// using System.Xml.Linq;
XElement contacts = XElement.Load(@"c:\myContactList.xml");

Z LINQ to SQL, należy najpierw utworzyć Model obiektowo relacyjny mapowanie w czasie projektowania ręcznie lub przy użyciu Object Relational Designer (O/R Designer).Piszesz kwerend przeciwko obiektów i w czasie wykonywania LINQ to SQL obsługuje komunikację z bazą danych.W poniższym przykładzie Customers reprezentuje określoną tabelą w bazie danych i rodzaju wynik kwerendy IQueryable<T>, wywodzi się z IEnumerable<T>.

Northwnd db = new Northwnd(@"c:\northwnd.mdf");

// Query for customers in London.
IQueryable<Customer> custQuery =
    from cust in db.Customers
    where cust.City == "London"
    select cust;

Aby dowiedzieć się więcej na temat tworzenia określonych typów źródeł danych, zobacz dokumentację dla różnych LINQ dostawców.Jednak podstawowa zasada jest bardzo prosta: LINQ źródło danych jest dowolnym obiektem obsługującym nazwę rodzajową IEnumerable<T> interfejsu lub interfejs, który dziedziczy z niego.

[!UWAGA]

Typy takich jak ArrayList , który obsługuje niepodstawowego IEnumerable interfejs można również jako LINQ źródło danych.Aby uzyskać więcej informacji, zobacz Jak: kwerendy ArrayList LINQ.

Kwerenda

Kwerenda Określa, jakie informacje, aby pobrać źródła danych lub źródeł.Opcjonalnie kwerendy określa również, jak te informacje powinny być posortowane, pogrupowane i kształcie jeszcze przed wysłaniem.Kwerendy jest zapisywana pod zmienną kwerendy i inicjowany za pomocą wyrażenia kwerendy.Aby ułatwić pisania zapytań, C# wprowadziła nowe elementy składni kwerendy.

W poprzednim przykładzie zwraca wszystkie liczby parzyste z tablicy liczba całkowitych.Wyrażenie kwerendy zawiera trzy klauzule: from, where i select.(Osoby zaznajomione z językiem SQL można zauważyć że zamawiania klauzule jest odwrotna z zamówienia w języku SQL.) from Klauzula Określa źródło danych where klauzuli stosuje filtr, a select klauzula określa typ zwracanych elementów.Te i inne klauzule kwerendy są szczegółowo omówione w Wyrażenia w kwerendzie LINQ (Podręcznik programowania C#) sekcji.Teraz, istotne jest, że w LINQ, samej zmiennej kwerendy nie podejmuje żadnej akcji i zwraca żadnych danych.Przechowuje on informacje, które są zobowiązani do przedstawienia wyników, gdy kwerenda jest wykonywana w pewnym momencie później.Aby uzyskać więcej informacji na temat jak kwerendy są tworzone w tle, zobacz Omówienie operatory kwerendy standardowe.

[!UWAGA]

Kwerendy można również wyrażane za pomocą składni metody.Aby uzyskać więcej informacji, zobacz Składnia zapytania i metody w technologii LINQ (C#).

Wykonywanie kwerendy

Bb397906.collapse_all(pl-pl,VS.110).gifWykonanie odroczonego

Jak wspomniano wcześniej, samej zmiennej kwerendy są przechowywane tylko polecenia kwerend.Rzeczywiste wykonanie kwerendy jest odłożona do iterować zmiennej kwerendy w foreach instrukcji.Koncepcja ta nazywa się wykonanie odroczonego i jest przedstawione w poniższym przykładzie:

//  Query execution. 
foreach (int num in numQuery)
{
    Console.Write("{0,1} ", num);
}

foreach Instrukcja jest również, gdzie wyniki kwerendy są pobierane.Na przykład w poprzedniej kwerendy, Zmienna iteracji num posiada każdej wartości (po jednym na raz) w sekwencji zwracane.

Ponieważ zmienna kwerendy, sam nigdy nie przechowuje wyników kwerendy, można wykonywać tak często, jak chcesz.Na przykład może być bazy danych, która jest stale aktualizowany przez oddzielny wniosek.W aplikacji można utworzyć jedną kwerendę, która pobiera najnowsze dane, i może wykonać w wielokrotnie u niektórych interwał pobierania różne wyniki za każdym razem.

Bb397906.collapse_all(pl-pl,VS.110).gifWymuszanie natychmiastowego wykonania

Kwerendy, która wykonuje funkcje agregacji w zakresie elementów źródła najpierw muszą przejść przez tych elementów.Examples of such queries are Count, Max, Average, and First.Te wykonać bez jawnej foreach instrukcji ponieważ samej kwerendzie należy użyć foreach w celu zwracania wyników.Należy również zauważyć, że te typy kwerend zwraca jedną wartość, nie IEnumerable kolekcji.Następująca kwerenda zwraca liczbę liczb parzystych w tablicy źródłowej:

var evenNumQuery = 
    from num in numbers
    where (num % 2) == 0
    select num;

int evenNumCount = evenNumQuery.Count();

Aby wymusić natychmiastowe wykonanie dowolnej kwerendy i buforowania ich wyników, trzeba wywołać ToList<TSource> lub ToArray<TSource> metody.

List<int> numQuery2 =
    (from num in numbers
     where (num % 2) == 0
     select num).ToList();

// or like this:
// numQuery3 is still an int[]

var numQuery3 =
    (from num in numbers
     where (num % 2) == 0
     select num).ToArray();

Można także wymusić wykonanie, umieszczając foreach pętli zaraz po wyrażeniu kwerendy.Jednakże, wywołując ToList lub ToArray również buforować wszystkie dane w obiekcie jedną kolekcję.

Zobacz też

Zadania

Instruktaż: Zapisywanie kwerendy w języku C# (LINQ)

Próbki LINQ

Informacje

foreach w (C# odniesienia)

Koncepcje

O/R Designer Overview

Wyrażenia w kwerendzie LINQ (Podręcznik programowania C#)

Inne zasoby

Wprowadzenie do programu LINQ w C#

Słowa kluczowe kwerendy (C# odniesienia)

LINQ i wykonanie odroczonego wideo