LINQ - Einheitlicher Datenzugriff in .NET

Post on 10-May-2015

1.790 views 5 download

description

Auch mit Objektorientierung gibt es immer noch eine große Kluft zwischen Programmen, die in einer Hochsprache geschrieben wurden und den Daten, die diese Programme bearbeiten. In Hochsprachen wie C# oder VB verwenden Entwickler spezialisierte Datentypen, Objekte, Methodenaufrufe und hochgradig optimierte Compiler, während beim Datenzugriff alles auf ein paar Strings reduziert wird, die SQL-Abfragen beinhalten. Entwickler arbeiten hierbei mit zwei total unterschiedlichen Paradigmen (Syntax von SQL und der bevorzugten Programmiersprache) sowie Typsystemen und konvertieren also ständig Daten zwischen zwei verschiedenen Domänen. Diese Unstimmigkeit ist Ursache für menschliche Fehler und verschwendet Zeit. LINQ ist Microsoft Antwort auf dieses Dilemma. Die Veranstaltung zeigt die Konzepte und Möglichkeiten der neuen .NET-Schnittstelle. Die Idee hinter LINQ Die verschiedenen Varianten - LINQ to Objects - LINQ to SQL - LINQ to DataSet - LINQ to XML - LINQ to Entity - LINQ to ..... Kurze Syntax-Übersicht Praktische Beispiele LINQ To Objects Kurz-Video LINQ to SQL Fazit und Ausblick

Transcript of LINQ - Einheitlicher Datenzugriff in .NET

ÜÜberblickberblick LINQLINQ

MarcoMarco SeraphinSeraphinMCP MCP -- MCAD MCAD -- MCTMCT

SeraphinSeraphin@@developedevelope--it.deit.de

WasWas istist .NET.NET

ll AgendaAgenda

ØØ Die Idee hinterDie Idee hinter LinqLinqØØ DieDie verschiedenen Variantenverschiedenen VariantenØØ KurzeKurze SyntaxSyntax--ÜÜbersichtbersichtØØ Praktische BeispielePraktische BeispieleØØ Fazit und AusblickFazit und Ausblick

LinqLinq -- Die IdeeDie Idee

DatenDaten !=!= ObjekteObjekte

LinqLinq -- Die IdeeDie Idee

ll LeistungsstarkeLeistungsstarke BackendBackend--SystemeSystemeØØ DBDB, SAP, Exchange,, SAP, Exchange, SharePointSharePoint,, BizTalkBizTalk

ll Leistungsstarke HochsprachenLeistungsstarke HochsprachenØØ C#, VB.Net, Java, DelphiC#, VB.Net, Java, Delphi

AberAber::LLüücke bei der Datenbeschaffung im Bereich cke bei der Datenbeschaffung im Bereich der Middlewareder Middleware

VielViel StringString--basiertbasiert,, wenig typisiertwenig typisiert (Connection(Connection--String, SQL StatementString, SQL Statement alsals String etc.)String etc.)

LinqLinq -- Die IdeeDie Idee

Imperativ DeklaritivImperativ Deklaritiv

Nicht wieNicht wie,, sondernsondern was !was !

LinqLinq -- Die IdeeDie Idee

ll Auch DatenAuch Daten//Informationsbeschaffung Informationsbeschaffung innerhalb des Programms sehrinnerhalb des Programms sehr„„technischtechnisch““

foreachforeach ()(){{for ()for (){{

if (x == 5)if (x == 5){{

......}}

}}}}

LinqLinq -- Die IdeeDie Idee

LLangugage angugage ININtegratedtegrated QQueryuery

LinqLinq -- Die IdeeDie Idee

ØØ FirstFirst--LevelLevel Erweiterung derErweiterung der .Net.Net SprachenSprachenØØ Streng typisiertStreng typisiertØØ IntelliSenseIntelliSense UnterstUnterstüützungtzung in VS 2008.Netin VS 2008.NetØØ QueriesQueries werden zur Laufzeit geprwerden zur Laufzeit geprüüftft,, nicht nicht

erst zur Ausferst zur AusfüührungszeithrungszeitØØ Wiederverwendbarkeit vonWiederverwendbarkeit von Queries (Queries (Zugriff Zugriff

auf Daten erfolgt erst zum Zeitpunkt auf auf Daten erfolgt erst zum Zeitpunkt auf das Ergebnisdas Ergebnis))

ØØ Verschiedene AusprVerschiedene Auspräägungengungen (SQL, ADO, (SQL, ADO, XML)XML)

ØØ ErweiterbaresErweiterbares ProviderProvider--KonzeptKonzept ((LinqLinq--toto--SharePointSharePoint,, LinqLinq--toto--Amazon etc.)Amazon etc.)

LinqLinq -- DieDie VariantenVarianten

LinqLinq -- DieDie VariantenVarianten

ll LinqLinq to Objectsto ObjectsØØ arbeitet auf IEnumerablearbeitet auf IEnumerable

ll LinqLinq to XMLto XMLØØ arbeitet aufarbeitet auf XMLXML SrtukturenSrtukturen

ll LinqLinq to SQLto SQLØØ arbeitet aufarbeitet auf SQLSQL--DatenbankenDatenbankenØØ (Light(Light--weight ORweight OR--MapperMapper))

ll LinqLinq to Entitiesto EntitiesØØ ADO.Net EntityADO.Net Entity FrameWorkFrameWork

LinqLinq -- DieDie VariantenVarianten

ll LinqLinq toto SharePointSharePointll LinqLinq to Amazonto Amazonll LinqLinq toto NHibernateNHibernatell LinqLinq toto FlickrFlickrll LinqLinq to LDAPto LDAPll LinqLinq to ....to ....

LinqLinq -- SyntaxSyntax

ll Beipiel LinqBeipiel Linq to Objectsto Objects

public void Linq1() {int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };var lowNums =

from n in numberswhere n < 5select n;

Console.WriteLine("Numbers < 5:");foreach (var x in lowNums) {

Console.WriteLine(x);}}

LinqLinq -- DemoDemo

DemoDemoLinqLinq to Objectsto Objects

LinqLinq -- SyntaxSyntax

ll Restriction : Restriction : wherewherell Grouping : Grouping : group bygroup byll Ordering :Ordering : orderbyorderbyll Projection : Projection : selectselect

LinqLinq -- SyntaxSyntax

ll Quantifiers : Quantifiers : Any, AllAny, Allll Aggregate : Aggregate : Count, Sum, Min, Max,Count, Sum, Min, Max,

AvergageAvergage, Fold, Fold

LinqLinq -- SyntaxSyntax

ll Partitioning : Partitioning : Take, Skip,Take, Skip, TakeWhileTakeWhile,,SkipWhileSkipWhile

ll Set : Set : Distinct, Union, Intersect, ExceptDistinct, Union, Intersect, Except

ll Conversion :Conversion : ToArrayToArray,, ToListToList,, ToDictionaryToDictionary,,OfTypeOfType

ll Element : Element : First,First, FirstOrDefaultFirstOrDefault,, ElemtAtElemtAt

ll Generation : Generation : Range, RepeatRange, Repeat

LinqLinq -- SyntaxSyntax

ll Beipiel LinqBeipiel Linq to SQLto SQL

MyDBContext dataContext = new MyDBContext();var query = from kunde in dataContext.Kunden

where kunde.StartsWith('A')select new {kunde.Name, Kunde.Adresse};

foreach (var k in kunde){listbox1.Items.Add(k.Name + " " + k.Adresse);

}

LinqLinq -- DemoDemo

DemoDemoLinqLinq to SQLto SQL

LinqLinq -- VerzVerzöögerte Ausfgerte Ausfüührunghrung

ll Der LinqDer Linq--Ausdruck wird erst beim Ausdruck wird erst beim Zugriff auf das Ergebnis tatsZugriff auf das Ergebnis tatsäächlich chlich ausgewertetausgewertetØØ ==>==> Der Ausdruck kann daher Der Ausdruck kann daher

wiederverwendet werdwiederverwendet werd,, auch wenn sichauch wenn sich diedieDatenbasis geDatenbasis geäändertndert hathat

ll EsEs kköönnen beliebig gronnen beliebig großße Datenmengen e Datenmengen verarbeitet werdenverarbeitet werden,, da nicht alle Daten da nicht alle Daten gleichzeitig im Speicher sindgleichzeitig im Speicher sind

LinqLinq -- Weitere QuellenWeitere Quellen

ll LinqLinq MicrosoftMicrosoftØ http://msdn.microsoft.com/data/ref/linq/

ll 101101 LinqLinq SamplesSamplesØ http://msdn2.microsoft.com/en-us/vcsharp/aa336746.aspx

ll ScottScott GuthrieGuthrie‘‘ss BlogBlogØ http://weblogs.asp.net/scottgu/archive/tags/LINQ/default.aspx

ll LinqLinq to Amazonto AmazonØ http://weblogs.asp.net/fmarguerie/archive/2006/06/26/Introducing-Linq-to-

Amazon.aspx

ll LinqLinq toto SharePointSharePointØ http://www.codeplex.com/LINQtoSharePoint