Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Björn Lorenz Geändert vor über 7 Jahren
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
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.