Jazykový integrovaný dotaz

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 2. května 2015; kontroly vyžadují 20 úprav .

Language Integrated Query (LINQ)  je projekt společnosti Microsoft , který přidává syntaxi dotazovacího jazyka podobnou SQL do programovacích jazyků .NET Framework . Dříve implementováno v C# a Visual Basic .NET . Mnoho konceptů, které LINQ zavádí, bylo původně testováno ve výzkumném projektu Microsoft .

LINQ byl vydán s Visual Studio 2008 na konci listopadu 2007. Pro rychlé vytváření a ladění dotazů LINQ existuje specializovaný nástroj s názvem LINQPad .

Vlastnosti jazyka

Pomocí některých nových jazykových funkcí vám LINQ umožňuje používat syntaxi podobnou SQL přímo v kódu programu napsaného například v C#:

Zdroje dat

LINQ nativně podporuje dotazovací stroj pro kolekce objektů v paměti, relačních databází a dat XML a má rozšiřitelnou architekturu, která umožňuje vývojářům třetích stran přistupovat ke svým datovým úložištím prostřednictvím enginu LINQ. Chcete-li to provést, musíte implementovat standardní operátory dotazů pomocí metod rozšíření nebo implementovat rozhraní IQueryable , které vám umožní analyzovat strom výrazů za běhu a přeložit jej do vašeho dotazovacího jazyka. Existuje příklad vlastní implementace standardních operátorů dotazů v komunitě. [jeden]

Například LINQ for SQL (dříve DLinq), který překládá výrazy LINQ do dotazů SQL proti databázi, využívá schopnost kompilátoru vytvořit strom výrazů založený na kontextu programu místo vytváření delegátů funkcí. Daný strom výrazů, který popisuje dotaz, jej může specializovaný poskytovatel databáze analyzovat a přeložit do dotazu v jazyce příslušném pro databázi, jako je Microsoft SQL Server, Jet (který se používá v aplikaci Microsoft Access) nebo jakýkoli jiný. Někteří nadšenci již pomocí této taktiky vytvořili LINQ proof-of-concept knihovny pro dotazování WMI [2] , RSS , LDAP [3] , sběr dat ADO.NET , Amazon Web Services [4] a SharePoint [5] .

Aktuální náhled od Microsoftu také obsahuje implementaci LINQ pro XML (dříve nazývanou XLinq), která výrazně usnadňuje vytváření a extrahování dat z dokumentu XML pomocí podobných přístupů. Microsoft navíc pracuje na ADO.NET vNext, známém také jako LINQ to Entities.

LINQ podle typů zdrojů dat

LINQ to SQL

Na konci roku 2008 byla odpovědnost za vývoj LINQ to SQL spolu s ADO.NET Entity Framework (včetně LINQ to Entities) převedena na vývojový tým ADO.NET (tzv. ADO.NET tým), zatímco dříve LINQ to SQL vyvíjel tým spojený s vývojem kompilátoru pro jazyk C# [6] . Ukázalo se tedy, že obě řešení jsou zaměřena na řešení stejných problémů, a proto si budou navzájem konkurovat. O něco později Tim Mallalew upřesnil, že Microsoft bude pokračovat ve vývoji LINQ to SQL na základě zpětné vazby od uživatelů. Počínaje .NET 4.0 je však doporučeným řešením LINQ to Entities. Navíc, na základě podnětů od uživatelů, budou do LINQ to Entities přidány nejčastěji používané funkce LINQ to SQL [7] . V důsledku toho bude docházet k postupnému slučování řešení.

Odborníci toto rozhodnutí vesměs podporovali. Takže například Marco Russo, ačkoli vznesl výhradu, že přechod na LINQ to Entities by neměl být dříve, než se změní v plnohodnotnou náhradu za LINQ to SQL, přesto prohlásil, že kombinace dvou částečně se překrývajících frameworků je dobrý nápad, ale zároveň by tím neměli trpět ti uživatelé, kteří jsou zvyklí používat „vyřazené“ části řešení [6] .

LINQ to objects

Není to nic jiného než funkční programování převlečené za syntaxi SQL [8] .

SQLMetal

Knihovna LINQ obsahuje nástroj SQLMetal, který umožňuje automaticky generovat třídy přímo z databází podporovaných rozhraním .NET Framework, díky čemuž je integrace databázových entit do kódu velmi rychlá a snadná. Alternativou je návrhář relačních objektů, který je součástí sady Visual Studio, ale lze jej použít pouze s Microsoft SQL Server.

Příklad

// typ Northwind je potomek DataContext vytvořený SQLMetalem // typ Northwind.Orders is Table<Order> // type Northwind.Customers is Table<Customer> Northwind db = new Northwind ( connectionString ); // je použito klíčové slovo 'var', protože typ //, ke kterému výsledek dotazu patří , neexistuje žádný název var q = od o v db . Objednávky od c v db . Zákazníci , kde o . Kvalita == "200" && ( o . IDZákazníka == c . IDZákazníka ) vybrat nové { o . Datum splatnosti , c . Název společnosti , c . ItemID , c . Název položky }; // q odkazuje na objekt typu IEnumerable<T>, kde T je anonymní typ // generovaný kompilátorem foreach ( var t in q ) { // t je silně zadaný, i když jeho typ nemá jméno // známé při psaní kódu Konzole . WriteLine ( "DueDate Type = {0}" , t . DueDate . GetType ()); Konzole . WriteLine ( "Název společnosti (s malými písmeny) = {0}" , t . Název společnosti . ToLower ()); Konzole . WriteLine ( "ID položky * 2 = {0}" , t . ID položky * 2 ); }

Viz také

Poznámky

  1. Vlastní implementace .NET Standard Query Operators od LINQ
  2. Dotazujte se snadno na své WMI pomocí WMIlinq! - Mielz' Thingamajig (sestupný odkaz) . Získáno 21. června 2007. Archivováno z originálu 10. dubna 2007. 
  3. Příběhy IQueryable – LINQ to LDAP – Část 0: Úvod – Blog B# .NET
  4. Představujeme Linq na Amazon – Fabriceův weblog
  5. LINQ to SharePoint
  6. 1 2 LINQ to SQL vs LINQ to Entities – rozhodnutí týmu ADO.NET Archivováno 24. ledna 2011.  (Angličtina)
  7. ↑ Vyjasnění zprávy o L2S Futures  
  8. LINQ jako krok k funkčnímu programování (Vlad Chistyakov, RSDN Magazine #2-2008)

Literatura

  • Adam Freeman, Joseph C. Ratts Jr. LINQ: Language Integrated Query in C# 2010 for Professionals = Pro LINQ: Language Integrated Query in C# 2010. - M .: Williams , 2011. - S. 656. - ISBN 978-5-8459-1701-0 .

Odkazy