The mechanics of LINQ

Download Report

Transcript The mechanics of LINQ

Level 300
The mechanics of LINQ
.NET language features
Johan Hedberg
[email protected]
http://blogical.se/blogs/johan
msn: [email protected]
© Logica 2008. All rights reserved
.NET genom tiderna
2002
2003
2005
2006
2008
Tool
(Visual
Studio)
VS .NET
2002
VS.NET
2003
VS2005
VS2005
+
Extensions
VS2008
Language(s)
C# v1.0
VB.NET
(v7.0)
C# v1.1
VB.NET
(v7.1)
C# v2.0
VB2005
(v8.0)
Framework
Libraries
NetFx v1.0
NetFx v1.1
NetFx v2.0
NetFx v3.0
NetFx
v3.5
CLR v1.0
CLR v1.1
CLR v2.0
as before
as before
Engine
(CLR)
17 July 2015
The mechanics of LINQ
as before
C# v3.0
VB9
No. 2
LINQ exempel
Hur ser LINQ kod ut?
var results =
from p in Person.GetPersons()
where p.Age > 30
select new { p.Name, p.Age };
17 July 2015
The mechanics of LINQ
No. 3
Agenda
•Vad är LINQ?
•NET Framework språk förändringar/förbättringar
•LINQ Implementationer
•WMBOF status
17 July 2015
The mechanics of LINQ
No. 4
Vad är LINQ?
Koncept
LINQ är en metodik som förenklar och gör olika typer av data access
enhetlig.
Språkmässigt
LINQ är en programmeringsmodell som gör queries till en första klassens
medborgare i .NET.
Implementation
LINQ är en kombination av utökningar i språket, kompilatorn och verktygen.
17 July 2015
The mechanics of LINQ
No. 5
.NET Framework features
Extension
methods
Anonymous
types
Local type
inference
Lambda
expressions
Generics
17 July 2015
yield
Object
initializers
Enumerators
delegates
The mechanics of LINQ
Anonymous
Methods
Automatic
properties
No. 6
Anonymous Methods
Ett sätt att direkt ange den kod som skall exekveras av en
delegate utan att peka ut en befintlig metod.
•.NET 2.0 feature
•Bygger på delegates (.NET 1.0)
•Kompilatorn skapar ett automatiskt genererat metodnamn
17 July 2015
The mechanics of LINQ
No. 7
Lamda expressions
Ett mer kraftfullt och kompakt sätt att skapa anonyma
metoder.
•.NET 3.0 feature
•Bygger på anonymous methods (.NET 2.0)
•Använder sig av =>
•Kan ha specifika syften
• Predicates - bool
• Projections – return type annan än inparameter
•Expression tree
17 July 2015
The mechanics of LINQ
No. 8
Object Initialization Expressions
Initialisering av ett objekts medlemmar samtidigt (på samma
kodrad) som det konstrueras.
•.NET 3.0 feature
•Tillåter att värden tilldelas publika klassvariabler eller properties.
Person p = new Person { FirstName = ”Johan”, LastName = ”Hedberg” };
•Kompilatorn producerar samma kod som om det gjorts på flera rader
•Kan nästlas
•Kan även användas för collections
17 July 2015
The mechanics of LINQ
No. 9
Local Type Inference
Tillåter typlös programmering medan typsäkerhet fortfarande
bibehålls vid kompilering.
•var är nyckelord
•var kan endast användas på lokala parametrar
17 July 2015
The mechanics of LINQ
No. 10
Anonymous Types
Tillåter skapandet av en instans utan att ha deklarerat en
klass.
•.NET 3.0 feature
•Nyttjar local type inference
•Nyttjar object initialization expressions
•Definieras som en anonym klass genom new utan typ
var p = new { FirstName = ”Johan”, LastName = ”Hedberg” };
17 July 2015
The mechanics of LINQ
No. 11
Extension Methods
Ett sätt att utöka eller ändra funktionaliteten i en
befintlig klass utan att använda arv.
•.NET 3.0 feature
•Gäller även klasser definierade som sealed
•Gäller publika metoder
•this används som nyckelord för parametrar i public static metod
deklarationer inuti static klasser
public static string AddSpace(this string s, int space)
•Måste inte returnera samma typ som de utökar
•Kan inte ändra beteendet i en befintlig metod
17 July 2015
The mechanics of LINQ
No. 12
Query Expressions
• .NET 3.5 feature, a.k.a. LINQ
Local variable
type inference
Query
expressions
var query =
from p in persons
where p.Age > 30
select new { p.Name, p.Age };
Lamda
expressions
var query = persons
.Where( p => p.Age > 30)
.Select( p => new { p.Name, p.Age } );
Extension
methods
Anonymous
types
17 July 2015
The mechanics of LINQ
Object
Initializers
No. 13
.NET 2.0 to LINQ Replay
17 July 2015
Title of Presentation
No. 14
Resurser
•Free LINQ e-book: Introducing LINQ
• http://csna01.libredigital.com/
•MSDN Nugget: Decomposing LINQ
• http://www.microsoft.com/uk/msdn/nuggets/nugget/227/decomposing-linq.aspx
17 July 2015
The mechanics of LINQ
No. 15
42
Q&A
17 July 2015
Title of Presentation
No. 16
Johan Hedberg
[email protected]
http://blogical.se/blogs/johan
msn: [email protected]
© Logica 2008. All rights reserved