Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

C# LINQ Funktionen höherer Ordnung. Allgemein ● Language Integrated Query ● Verfahren von Microsoft zum Zugriff auf Daten ● Hauptentwickler Erik Meijer.

Ähnliche Präsentationen


Präsentation zum Thema: "C# LINQ Funktionen höherer Ordnung. Allgemein ● Language Integrated Query ● Verfahren von Microsoft zum Zugriff auf Daten ● Hauptentwickler Erik Meijer."—  Präsentation transkript:

1 C# LINQ Funktionen höherer Ordnung

2 Allgemein ● Language Integrated Query ● Verfahren von Microsoft zum Zugriff auf Daten ● Hauptentwickler Erik Meijer

3 Aufbau http://de.wikipedia.org/w/index.php?title=Datei:AnbieterLINQ.png&filetimestamp=20121029104103

4 Arbeitsweise ● Linq Anweisungen werden zu Quellcode übersetzt. ● Abfrageergebnisse übergibt Linq typisiert. ● Die Linq Provider übersetzten die Anfragen in spezielle Zugriffsmethoden. ● Provider: Linq to Objects,... ● Drittanbeiter: Linq to Amazon

5 Ziel ● Verschiedene Datenquellen mit den selben Zugriffsmethoden zu nutzen. ● Datenquellen: Object (Listen) SQL XML ● Es werden keine unübersichtlichen Schleifen mehr benötigt. ● Der zugriff auf Daten in einer Liste wird verkürzt. ● Im Linq Teil des Programmcodes können keine Seiteneffekte auftreten. ● Compiler hat bessere Optimierungsmöglichkeiten.

6 Notationsformen var v = from i in zahlen select i * i; var v = zahlen.Select(i => i * i); var v = zahlen.Select(SelectFkt); int SelectFkt(int i) { return i * i; }

7 Typbeziehungen einer Abfrage http://i.msdn.microsoft.com/dynimg/IC33132.png

8 Aufbau einer Funktion höherer Ordnung Haskell: map :: (Int -> Int) -> [Int] -> [Int] map f (x:xs) = (f x) : map f xs Linq: IEnumerable Map(Func fkt, int[] zahlen) { return from i in zahlen select fkt(i); }

9 Typbeziehungen bei Funkionen höherer Ordnung Haskell: map :: (Int -> Int) -> [Int] -> [Int] map f (x:xs) = (f x) : map f xs Linq: IEnumerable Map(Func fkt, int[] zahlen) { return from i in zahlen select fkt(i); }

10 Foldl / Foldr Foldl (-) 0 [ 9, 4, 11, 3, 5] -32 new int[] { 9, 4, 11, 3, 5 }.Aggregate(0, (r, i) => r – i); -32 Foldr (-) 0 [ 9, 4, 11, 3, 5] 18 new int[] { 9, 4, 11, 3, 5 }.Aggregate(0, (r, i) => i - r); 18

11 Foldl / Foldr Unterschied zu Haskell: Die Aggregate Funktion benötigt keinen Startwert. In diesem Fall wird beim ersten Aufruf der übergebenen Funktion mit dem ersten und zweiten Element der Liste begonnen. new int[] { 9, 4, 11, 3, 5 }.Aggregate((r, i) => r – i); -14 (((9 – 4) – 11) – 3) - 5

12 Vorteile oder Nachteile von Linq ● Es ist nicht möglich komplett mit Linq zu programmieren, da es nur für Listen unterschiedlicher Art zur Verfügung steht. ● In den benötigten C# Teilen treten Seiteneffekte auf. ● Nachteile: ● Keine unendlichen Listen ● Bei zu großen Listen Stackoverflow Exception

13 Fazit Linq ist noch nicht ausgereift aber die Verwendung kann sich durchaus lohnen.

14 Quellen http://de.wikipedia.org/wiki/LINQ http://www.dotnetpro.de/articles/ DownloadArticle.aspx?id=4177 http://code.msdn.microsoft.com/ 101-LINQ-Samples-3fb9811b http://msdn.microsoft.com/ de-de/library/bb397924.aspx http://oakleafblog.blogspot.de/ 2007/03/third-party-linq-providers.html


Herunterladen ppt "C# LINQ Funktionen höherer Ordnung. Allgemein ● Language Integrated Query ● Verfahren von Microsoft zum Zugriff auf Daten ● Hauptentwickler Erik Meijer."

Ähnliche Präsentationen


Google-Anzeigen