Devel.cz Lupa Měšec Podnikatel Root Zdroják.cz DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Názory k článku
LINQ a lambda expressions

Tuck
Tuck (neregistrovaný) 194.228.204.---
29. 10. 2009 6:44 Nový

Vlastní implementace IQueryable<T>

celé vlákno

Moc pěkně napsáno. Ještě by byl super článek o vlastní implementaci IQueryable<T>.

Díky za článek

René Stein
René Stein (neregistrovaný) ---.115.broadband12.iol.cz
29. 10. 2009 8:30 Nový

Drobná upřesnění

celé vlákno

Pěkný článek Augi.

Jen bych zmínil dvě maličkosti:

Citace:
„V prvních verzích C# byla jediná možnost – vytvořit metodu se stejnou signaturou a do delegáta přiřadit její jméno:“

To je pravda, ale automatická inference typu delegáta nefungovala. V C# 1.x bylo nutné použít takovouto syntaxi.

ExampleDelegate del = new ExampleDelega­te(ExampleMet­hod);

Chápu, že klíčové slovo var jsi nechtěl použít a u kolekcí žádná záludnost nehrozí, ale té explicitní deklarace typu proměnných bych se v tomto případě bál.

Už jen proto, že jsme několikrát viděl v praxi u lidí, kteří se zaklínali tím, že var je zlo, tento děsivý kód.

IEnumerable<Person> men = persons.Where(p ⇒ p.Gender == Gender.Male);

Ale persons byly typu IQueryable (from person in dbContext.Persons select person). Potom to znamena, ze dotazem do databaze byly vyzvednuty vsechny osoby a teprve v aplikace se aplikoval operator where z IEnumerable. IQueryable je v tomto pripade BOHUZEL potomkem IEnumerable, takze implicitni konverze bez problemu projde.

Pokud pouziju:
var men = persons.Where(p ⇒ p.Gender == Gender.Male);
Nechavam spinavou praci na kompilatoru, ktery v danem pripade spravne vytvori promennou typu IQueryable a cely dotaz i s podminkou bude vykonan na serveru (SQL) a vrati se mi jen zaznamy, ktere vyhovuji podmince p.Gender == Gender.Male);

René Stein
René Stein (neregistrovaný) ---.115.broadband12.iol.cz
29. 10. 2009 8:36 Nový

Re: Drobná upřesnění

celé vlákno

IEnumerable<Person> men = persons.Where(p ⇒ p.Gender == Gender.Male);
Tadz ještě upřesním, že person byly původně IQuryable, ale jsou také přetypovány na IEnumerable.

IEnumerable<Person> men = from person in dbContext.Persons select person;

Michal Augustýn
29. 10. 2009 18:02 Nový

Re: Drobná upřesnění

celé vlákno

Díky, velmi dobré poznámky!

O tom druhém (IEnumerable vs. IQueryable) jsem ani nikdy nepřemýšlel, protože téměž vždy používám var.
Jen bych dodal, že jádrem problému je to, že použitá extension metoda Where se vybere už při kompilaci a to podle uvedeného typu.
Aspoň mám o argument víc, proč používat var :)

Michal B.
Michal B. (neregistrovaný) ---.223.broadband5.iol.cz
29. 10. 2009 21:32 Nový

Re: Drobná upřesnění

celé vlákno

Ahoj Rene.
Zajimave upozorneni, ktere neni vubec „viditelne“ na prvni pohled.
Diky za nej !

Michal

Timy _ aura:74
29. 10. 2009 11:16 Nový

Skvělý článek

celé vlákno

Skvělý článek, díky.

Zasílat nově přidané příspěvky e-mailem