Sdílet prostřednictvím


Základní operace dotazů LINQ (C#)

Toto téma poskytuje stručný úvod do LINQ dotaz výrazy a některé typické druhy operací, které provedete v dotazu.Podrobnější informace jsou v následujících tématech:

LINQ – výrazy dotazů (Průvodce programováním v C#)

Přehled standardních operátorů dotazu

Návod: Zápis dotazů v C# (LINQ)

[!POZNÁMKA]

Pokud jste již obeznámeni s dotazovací jazyk, jako je například SQL nebo XQuery, můžete vynechat většinu tohoto tématu.Přečtěte si informace o "from klauzule" v části Další informace o pořadí klauzulí v LINQ dotazových výrazů.

Získání zdroje dat.

V LINQ dotazu, prvním krokem je určení zdroje dat.V jazyce C# jako ve většině programovacích jazyků proměnné musí být deklarován dříve, než mohou být použity.V LINQ dotazu, from klauzule přichází nejprve s cílem zavést zdroj dat (customers) a proměnné rozsahu (cust).

//queryAllCustomers is an IEnumerable<Customer> 
var queryAllCustomers = from cust in customers
                        select cust;

Proměnné rozsahu je jako iterační proměnná v foreach opakovat s tím rozdílem, že žádné skutečné iterace vyvolá ve výrazu dotazu.Při spuštění dotazu proměnné rozsahu bude sloužit jako odkaz na každý následující prvek v customers.Protože kompilátor může odvodit typ cust, není nutné explicitně zadat.Další oblast proměnné mohou být způsobeny let klauzule.Další informace naleznete v tématu let – klauzule (Referenční dokumentace jazyka C#).

[!POZNÁMKA]

U neobecných dat zdroje, jako je například ArrayList, proměnné rozsahu musí být explicitně zadán.Další informace naleznete v tématu Postupy: Vytvoření dotazu na ArrayList pomocí LINQ a from clause (Referenční dokumentace jazyka C#).

Filtrování

Pravděpodobně je nejběžnější operace dotazu použít filtr ve formuláři logický výraz.Filtr způsobí, že dotaz vrátí pouze ty prvky, pro které výraz je pravdivý.Výsledkem je vyrobeno s použitím where klauzule.Filtr ve skutečnosti určuje prvky, které chcete vyloučit ze zdrojové sekvence.V následujícím příkladu, pouze ty customers mají adresu v Londýně jsou vráceny.

var queryLondonCustomers = from cust in customers
                           where cust.City == "London" 
                           select cust;

Pomocí známých C# logické AND a OR subjekty povinny požádat tak, jak mnoho filtrování výrazů v případě potřeby where klauzule.Například chcete-li vrátit pouze zákazníky z "Praha" AND jehož název je "Devon" byste měli psát následující kód:

where cust.City=="London" && cust.Name == "Devon"

Vrátit zákazníci z Brna nebo Paříž, byste měli psát následující kód:

where cust.City == "London" || cust.City == "Paris"

Další informace naleznete v tématu where – klauzule (Referenční dokumentace jazyka C#).

Řazení

Často je vhodné seřadit vrácená data.orderby Klauzule způsobí prvků ve vrácené posloupnost řazení podle výchozí comparer pro typ řazen.Například následující dotaz lze rozšířit k řazení výsledků vychází Name vlastnost.Protože Name je řetězec, výchozí comparer provede abecední řazení od A do Z.

var queryLondonCustomers3 = 
    from cust in customers
    where cust.City == "London" 
    orderby cust.Name ascending 
    select cust;

V opačném pořadí řazení výsledků od Z do A, použít orderby…descending klauzule.

Další informace naleznete v tématu orderby – klauzule (Referenční dokumentace jazyka C#).

Seskupení

group Klauzule umožňuje seskupit výsledky podle klíče, který zadáte.Například můžete zadat výsledky by měly seskupeny City tak, aby všichni zákazníci z Brna nebo do Paříže v jednotlivých skupinách.V tomto případě cust.City je klíč.

// queryCustomersByCity is an IEnumerable<IGrouping<string, Customer>> 
  var queryCustomersByCity =
      from cust in customers
      group cust by cust.City;

  // customerGroup is an IGrouping<string, Customer> 
  foreach (var customerGroup in queryCustomersByCity)
  {
      Console.WriteLine(customerGroup.Key);
      foreach (Customer customer in customerGroup)
      {
          Console.WriteLine("    {0}", customer.Name);
      }
  }

Konec dotazu s group klauzule, výsledky podobu seznamů.Každý prvek v seznamu je objekt, který má Key člena a seznam prvků, které jsou seskupeny pod tímto klíčem.Při iteraci přes dotaz, který vytváří pořadí skupin, musíte použít vnořený foreach smyčky.Vnější smyčka Iteruje přes každou skupinu a vnitřní smyčka Iteruje přes členové každé skupiny.

Pokud musí odkazovat na výsledky operace skupinu, můžete použít into klíčové slovo vytvořit identifikátor, který může být dotazován na další.Následující dotaz vrátí pouze skupiny, které obsahují více než dva zákazníci:

// custQuery is an IEnumerable<IGrouping<string, Customer>> 
var custQuery =
    from cust in customers
    group cust by cust.City into custGroup
    where custGroup.Count() > 2
    orderby custGroup.Key
    select custGroup;

Další informace naleznete v tématu group – klauzule (Referenční dokumentace jazyka C#).

Spojení

Operace spojení vytvořit spojení mezi sekvencí, které nejsou explicitně modelována ve zdrojích dat.Můžete například provést spojení vyhledání zákazníků a distributorů, kteří mají stejné umístění.V LINQjoin klauzule vždy funguje proti objektu kolekce namísto tabulek databáze přímo.

var innerJoinQuery =
    from cust in customers
    join dist in distributors on cust.City equals dist.City
    select new { CustomerName = cust.Name, DistributorName = dist.Name };

V LINQ není nutné používat join tak často, jak lze provést v SQL, protože cizí klíče v LINQ jsou zastoupeny v modelu objektu jako vlastnosti, které obsahují kolekci položek.Například Customer objekt obsahuje kolekci Order objekty.Místo provedení spojení přístup objednávky pomocí zápisu s tečkou:

from order in Customer.Orders...

Další informace naleznete v tématu join – klauzule (Referenční dokumentace jazyka C#).

Výběr (projekce)

select Klauzule vytváří výsledky dotazu a určuje "tvar" nebo typ každý vrácený element.Například můžete určit, zda výsledky bude obsahovat úplný Customer objekty, pouze jeden člen, podsady členů nebo některých zcela jiný výsledek typu na základě výpočtu nebo vytvoření nového objektu.Když select klauzule vytváří něco jiného než kopii zdrojového prvku, operace se nazývá projekce.Projekce k transformaci dat používá výkonné funkce LINQ dotazových výrazů.Další informace naleznete v tématu Transformace dat pomocí LINQ (C#) a select – klauzule (Referenční dokumentace jazyka C#).

Viz také

Úkoly

Návod: Zápis dotazů v C# (LINQ)

Referenční dokumentace

Anonymní typy (Průvodce programováním v C#)

Koncepty

LINQ – výrazy dotazů (Průvodce programováním v C#)

Základní operace dotazů (Visual Basic)

Další zdroje

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

Klíčová slova dotazu (Referenční dokumentace jazyka C#)