Moc pěkně napsáno. Ještě by byl super článek o vlastní implementaci IQueryable<T>.
Díky za článek
Moc pěkně napsáno. Ještě by byl super článek o vlastní implementaci IQueryable<T>.
Díky za článek
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 ExampleDelegate(ExampleMethod);
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);
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;
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 :)
Ahoj Rene.
Zajimave upozorneni, ktere neni vubec „viditelne“ na prvni pohled.
Diky za nej !
Michal