LINQ

  • úvod
  • LINQ to SQL
  • Další implementace LINQ
    1. PLinq
    2. LINQ to XSD
    3. LINQ to Amazon
    4. Blinq
    5. další…

Neznáte LINQ?
LINQ je dotazovací jazyk integrovaný přímo v C# nebo VB.NET. LINQ je součástí .NET Framework 3.5 na jehož finální verzi si ještě nějakou dobu počkáme, tzn. k dispozici zatím máme pouze CTP (něco jako beta).

Co umí LINQ?

LINQ - dotazování v kolekcích, polích a pod.
LINQ to XML - dotazování do XML (dříve XLinq)
LINQ to SQL - dotazování do databáze (dříve DLinq)

LINQ to SQL je nejzajímavější a nejspíš i nejpoužívanější, dovoluje nám provádět jednoduše a hlavně objektově dotazy nad databází.

Select

DbShop db = new DbShop(Data Source=(local);Initial Catalog=eShop);
var results = from p in db.Products
                 where p.Description.Contains(kvalitní) && p.Price < 600
                 orderby p.Price
                 select p;

foreach (var item in results)
{
    Console.WriteLine(string.Format(item: {0}, price: {1}, item.Name, item.Price));
}

Insert

Products product = new Products();
product.Name = LINQ in Action;
product.Description = Kniha o nové technologii LINQ;
product.Price = 499;

db.Products.Add(product);
db.SubmitChanges();

Update

var item = (from p in db.Products
                  where p.ID = 10
                  orderby p.Price
                  select p).First();

item.Price = 6500;
item.Discount = true;

db.SubmitChanges();

Třídy DbShop (práce s databází) a Products (tabulka Products), které se zde používají jsou velice důležité a objektově popisují schéma databáze, nad kterou se pracuje. Jsou zde implementovány metody, vlastnosti nebo třeba relace mezi tabulkami což umožňuje přeložení LINQ dotazů do podoby SQL dotazů nebo práci se samotnou databází.
Tyto třídy popisující schéma je možné buď psát ručně (celkem pracné) a nebo použít SqlMetal.exe, který je součástí instalace LINQu a který vygeneruje potřebné třídy automaticky podle databáze.

Překlad LINQ na SQL

Odkazy

Server o LINQu
http://linqinaction.net/

101 jednoduchých ukázek použití základních operací LINQu
http://msdn2.microsoft.com/en-us/vcsharp/aa336746.aspx ^

Podrobný dokument o LINQ to SQL
http://msdn2.microsoft.com/en-us/library/bb425822.aspx ^

Podrobný dokument o LINQ to XML
http://msdn2.microsoft.com/en-us/library/bb308960.aspx ^

LINQ to cokoliv?

LINQ umožňuje víc - můžeme vytvářet vlastní implementace založené na tomto dotazovacím jazyce. Již dnes exitují některé rozšíření LINQu…

PLinq - Parallel Linq

Interní projekt Microsoftu PLinq je technologie zaměřená na vývoj aplikací bežících na několika procesorech - pouze definujeme co se má počítat, o paralelní výpočet se už postará PLinq.

Více na http://www.bluebytesoftware.com/blog/PermaLink,guid,81ca9c00-b43e-4860-b96b-4fd2bd735c9f.aspx ^

LINQ to XSD

Další interní projekt Microsoftu je Linq to XSD.
Problém samotného XML je že se jedná o generický zápis dat, nevíme jakého typu jsou data v daném XML uloženy nebo jaká je struktura, proto LINQ to XML (nezaměňujte s LINQ to XSD) vypadá takto:

var results = from item in purchaseOrder.Elements(Item)
           where (double)item.Element(Price) < 600
           select new {
                  (double)item.Element(Price),
                  (int)item.Element(Quantity) };

Nedochází zde ke kontrole datového typu hodnot a ani intellisense nefunguje, protože nezná strukturu dat.

Řešením je Linq to XSD
XSD je shcéma XML souboru popisující strukturu a typ uložených dat.

var results = from item in purchaseOrder.Elements(Item)
           where item.Element(Price) < 600
           select new { item.Element(Price), item.Element(Quantity) };

Rozdíl je tedy nejen v syntax, ale také intellisense zde funguje, protože podle XSD zná strukturu dokumentu a datové typy.

Další informace o LINQ to XSD
http://blogs.msdn.com/xmlteam/archive/2006/11/27/typed-xml-programmer-welcome-to-linq.aspx ^

Stáhnout LINQ to XSD:
http://www.microsoft.com/downloads/details.aspx?FamilyID=6979e1eb-4a05-4ac6-ac9d-b3e138d33633&displaylang=en ^

LINQ to Amazon

Zajímavou ukázkou může být propojení LINQu na internetový obchod Amazon.

var query =
  from book in new Amazon.BookSearch()
  where
    book.Title.Contains(ajax) &&
    (book.Publisher == Manning) &&
    (book.Price <= 25) &&
    (book.Condition == BookCondition.New)
  select book;

http://weblogs.asp.net/fmarguerie/archive/2006/06/26/Introducing-Linq-to-Amazon.aspx

BLinq

BLinq je projekt maličko vybočující z řady výše uvedených. Generuje ASP.NET stránky pro manipulaci s daty a tabulkami databáze. Umožní přes webové stránky nejen prohlížet data v tabulkách, ale také přidávat, mazat nebo měnit záznamy. Pokud znáte například MyPhpAdmin, Blinq je obdobný projekt založený na LINQu.
http://www.asp.net/sandbox/app_blinq.aspx?tabid=62 ^

Další projekty

Leave a Reply