SlideShare una empresa de Scribd logo
1 de 76
Descargar para leer sin conexión
LINQ Training
07/2013
Agenda
 A brief history…
 What is LINQ ?
 C# language enhancements
 Base concepts
 Advanced concepts
 Examples
 Going deeper?
 Questions
2
I) A brief history…
ODBC & DAO
• ODBC (Open DataBase Connectivity):
- released in 1992 by Microsoft, for Windows systems, based on the SQL
Access Group Specification
- Middleware dedicated to manipulate Databases
- Full software, with UI, API and drivers for all the SGBD on the market
- Latest version : 3.0 , released on 1999
• Data Access Object
- API created to consume ODBC with VB
At this time, industry began to push « object-oriented, distributed,
componentized software » : Microsoft needed to add a new data access for
its COM response to Object Management Group’s CORBA.
4For more info, see http://blogs.msdn.com/b/data/archive/2006/12/05/data-access-api-of-the-day-part-i.aspx
OLE DB & ADO
• Object Linking and Embedding
- Designed to be the principal data access layer for the COM universe.
- Offers a « componentized » data access interface, able to work both with DBs
(query result, table, view..) text files, Excel files, registery, email…
- Sources have a common data representation
- Low level interface => needs a wrapper API to be used : ADO
• ActiveX Data Oject
- Use the same model than DAO, and add a Disconnected mode, base on a foreward
only cursor.
And then, MS started .NET framework project to counter Java…
5
For more info, see http://blogs.msdn.com/b/data/archive/2006/12/13/data-access-api-of-the-day-part-ii-componentizing-data-
access.aspx
ADO.NET
In 1998, « COM3 » project, that became .Net framework was launched.
With Internet and XML rise, it became obvious that the framework should
embed a dedicated data access framework, that could deal both with
asynchronous remote connections and local (server) data computing.
6
For more info, see http://blogs.msdn.com/b/data/archive/2006/12/22/data-access-api-of-the-day-part-iii-disconnected-
programming-in-a-managed-environment.aspx
Linq & ADO.NET Entities
ADO.NET Entities is built on top of ADO.NET.
The main idea was to develop applications relying on a conceptual model
rather than a relationnal DB schema.
The approach of ADO.NET Entities is entirely client-sided, which means that
databases don’t need any modification to work with, once an ADO.NET
provider exists.
Another main advantage is that an application emits standard SQL, so it’s
manageable, verifiable and readable.
7For more infos, see http://blogs.msdn.com/b/data/archive/2007/01/23/data-access-api-of-the-day-_2800_part-iv_2900_.aspx
II) What is LINQ ?
Linq is about data queries
The most important part of Linq is about getting sequences from data sources.
By default, the data sources that can be requested by Linq are :
- Object (Linq to Objects)
- XML fragments or docs (Linq to XML)
- ADO.NET DataSet ( Linq to DataSet)
- Sql Server (Linq to SQL)
- Entity Framework (Linq to Entities)
In theory, every kind of data source can be handled by Linq, with custom Linq
providers ( as Linq to Google or Linq to Lucene)
9
Ressources to create your own linq provider:
http://msdn.microsoft.com/en-us/library/vstudio/bb546158.aspx
http://msdn.microsoft.com/en-us/library/system.linq.expressions.expressionvisitor.aspx
Linq can do more than queries
You can use LINQ to transform set of data :
- Convert your data :
10
- Transform your data :
11
III) C# language enhancements
• A) Lambda Expressions
• B) Expression Trees
• C) ‘var’, object and collection initialization and
anonymous types
• D) Extensions methods
• E) Partial Methods
• F) Query expression
12
A) Lambda Expressions : get rid of delegates
Base Code :
13
A) Lambda Expressions : get rid of delegates
- Old fashionned : named methods
The first way that allowed developers to customize the behavior of a core
class without having to use inheritance was to expose delegates and use it
inside the core method. Here, we are explicitly declaring the delegate filter
we want to use :
14
A) Lambda Expressions : get rid of delegates
- A step further : anonymous methods
In framework 2.0, this feature was added in order to reduce amount of code
needed :
Indeed, if the delegate is used only once, there is no need to expose it.
But it remains verbose and hard to read.
15
A) Lambda Expressions : get rid of delegates
- Linq fashion : Lambda
Here, the delegate is subtituted by a Lambda. Lambda expression is a concept
coming from functionnal programming, and that provides shorthand for
specifying an algorithm.
Lambda expressions are specified as a comma-delimited list of parameters
followed by the lambda operator, followed by an expression or statement
block
(param1, param2, …paramN) => expr
(param1, param2, …paramN) => { statement1; return (lambda_expression_return_type); }
16
B) Expression trees
• Tree-like data structure.
• Almost used to implement new Linq provider
Usefull concept to represent the lambda algorythms.
Heavily used behind the scene by Linq, not part of this
training.
17
http://msdn.microsoft.com/en-us/library/bb397951.aspx
http://geekswithblogs.net/Martinez/archive/2009/06/29/understanding-expression-trees.aspx
http://www.codeproject.com/Articles/235860/Expression-Tree-Basics
C) ‘var’, object and collection initialization and
anonymous types
- Object initialisation :
Short hand to instantiate objects :
Allows to initialize object’s values at instantiation time.
To use this feature, a class should have an accessible constructor.
18
C) ‘var’, object and collection initialization and
anonymous types
- Collections Initialisation
Allows to initialize collection of object values at instantiation time.
To use this feature, a collection class should have an accessible constructor.
19
D) Extensions methods
- Extensions methods aim to extend behavior of a class, by adding features without
modifying the base type.
- An extension method is a static method of a static class that take as first parameter
an instance of the extended type prefixed by the « this » keyword.
Call :
Linq is heavily based on extensions, that target in particular IEnumerable and
IQueryable interfaces,
20
E) Partial Methods
Lightweight event-handling mechanism.
gives
Adding a partial method
gives
21
E) Partial Methods
More efficient than inheritance to allow many potentially unimplemented
hooks in code.
This feature is heavily used by Linq to Entities code generator, to make
generated entities more usables,
• Partial methods must be defined and implemented only in partial classes.
• Partial methods must specify the partial modifier.
• Partial methods are private but must not specify the private modifier, or a
compiler error will result.
• Partial methods must return void.
• Partial methods may be unimplemented.
• Partial methods may be static.
• Partial methods may have arguments.
22
F) Query expression
• Query expression is a paradigm shift that allows to run queries against sets
of data in a near SQL fashion :
- first line represent the targeted dataset.
- second line abstracts a WHERE clause.
- third line show the projection clause.
- last line executes the query.
Fluent linq api version :
Some Linq operators are available only in query expression syntax.
Standard and query syntax can be mixed.
In some case, the query expression syntax is more understable than fluent API
23
IV) Base Concepts
• A) Linq to object
• B) Func<> delegate
• C) Defered vs Undefered operators
• D) Base defered operators
• E) Base undefered operators
• F) Tips and tricks!
24
A) Linq to Objects
- Linq to Objects is the base functionnality of Linq.
- It targets sequences of objects (collections, lists, arrays) and
yields most often IEnumerable<T> (undefered operators) or
IQueryable<T> (defered operators)
- Linq to Objects functiunalities are under the System.Linq
namespace
25
B) Func<> delegates
A lot of Linq operators take a Func<> parameter.
For example, check the Where operator :
This type allow to wrap a delegate function, in lambda expression form.
26
C) Defered vs Undefered operators
Defered operators don’t execute queries until explicitly asked. Futhermore,
they return a query, not the result of query :
Gives the following result :
As you can see, each time that maleEmployees is
enumerated, the query is executed.
27
C) Defered vs Undefered operators
Unefered operators exucute queries directly. Here .ToList() operator is an
undefered one
Gives the following result :
maleEmployees will not change when
adding a new entry to employees
28
D) Base defered operators
Restriction
- Where
Projection
- Select
- SelectMany
Partitioning
- Take
- TakeWhile
- Skip
- SkipWhile
Concatenation
- Concat
Set
- Distinct
- Union
- Intersect
- Except
Conversion
- Cast
- OfType
- AsEnumrable
Element
- DefaultIfEmpty
Generation
- Range
- Repeat
- Empty
29
Sorting
- OrderBy
- OrderByDescending
- ThenBy
- ThenByDescending
- Reverse
Join
- Join
- GroupJoin
Grouping
- GroupBy
D) Base defered operators
Where() operator
Is used to refine data following the passed predicate
Has two prototypes :
Only the predicate differs. The second one pass the item index to the predicate :
In a general way, several Linq operators offer an additionnal « predicate with index »
prototype, check out the System.Linq namespace of System.Core assembly in the
Object Explorer! 30
D) Base defered operators
Projection operators
- Select :
This operator aim is to specify and cutomize the output of a query.
will return an IEnumerable<String>.
When used without selector simply return the full object
- SelectMany :
Is used to create one-to-many sequences, It always takes a selector parameter.
31
D) Base defered operators
Partitioning Operators :
- Take()
- TakeWhile()
- Skip()
- SkipWhile()
Thoses operators allow to split sequences easily, for paging purpose, for example.
32
D) Base defered operators
Concatenation:
- Concat() :
It allows to simply concat sequences of the same type:
33
D) Base defered operators
Ordering:
Those operators allow to simply order sequences.
- OrderBy() and OrderByDescending() :
Return IOrderedEnumerable<T> and cannot take IOrderedEnumerable<T> parameter
- ThenBy() end ThenByDescending() :
Return IOrderedEnumerable<T> and must take IOrderedEnumerable<T> parameter
Each one has an additionnal prototype taking an IComparer, if a custom ordering is
needed
- Reverse() :
Simply output a reversed sequence. 34
D) Base defered operators
Joining:
- Join()
It performs an equi-join between sequences :
- GroupJoin()
Perform a join between sequences, and enumerates the inner sequence
35
D) Base defered operators
Set operators
Thoses operators are used to perform mathematical set-type operations on sequences
- Distinct() : Removes duplicates elements in sequence
- Union() : Yields element of input sequences, and then yields element of second
sequence that are not in the first one
- Intersect() : Yields elements that are in both sequences
- Except() : Yields the elements of the input sequence that are not in the 2nd one
36
D) Base defered operators
Conversion operators
- Cast()
- OfType() :
Cast() and OfType target non-generic Ienumerable interface, in order to open Linq
functionnalities to legacy collections.
Cast() will throw an exception if it cannot cast an element of the input sequence, while
OfType will simply ignore the uncastable elements
- AsEnumrable() :
Cast a sequence into a normal IEnumerable<T> in order to use standard Linq
operators. For example, Select() in Linq To SQL returns IQueryable<T> that don’t
implement the Reverse() operator,
37
D) Base defered operators
Element operator
- DefaultIfEmpty()
This operator will generate a default element if the output sequence is empty.
Basically, it avoids the System.InvalidOperationException: Sequence contains no
elements
38
D) Base defered operators
Generation operators
- Range()
Static method (not a extension) that generates a sequence of integers,
- Repeat()
Its generates a sequence of the same specified element.
- Empty()
Static method (not a extension) that generates an empty sequence of the requested
type
39
E) Base undefered operators
Conversion
- ToArray
- ToList
- ToDictionary
- ToLookup
Element
- First
- FirstOrDefault
- Last
- LastOrDefault
- Single
- SingleOrDefault
- ElementAt
- ElementAtOrDefault
Quantifiers
- Any
- All
- Contains
Equality
- SequenceEqual
Aggregate
- Count
- LongCount
- Sum
- Min
- Max
- Average
- Aggregate
40
E) Base undefered operators
Conversion operators
- ToArray() :
Take an IEnumrable<T> and return an array T[].
- ToList() :
Take an IEnumrable<T> and return a List<T>.
- ToDictionary()
- ToLookup() :
Have the same prototypes, and rely on Func<> to select Keys and Elements :
41
E) Base undefered operators
Element Operators
- First
- FirstOrDefault
- Last
- LastOrDefault
- Single
- SingleOrDefault
- ElementAt
- ElementAtOrDefault
Self speaking methods. Just keep in mind that the « OrDefault » version will generate
a default element if no element is found whereas classic version will throw an
exception.
42
E) Base undefered operators
Quantifiers Operators
- Any()
Returns true if at least one element of the sequnce match the predicate
- All()
Returns true if all elements of the sequnce match the predicate
- Contains()
Returns true if the sequence contains the parameter item.
Equality operator
- SequenceEqual()
It determines whether two input sequences are equal.
43
E) Base undefered operators
Aggregate operators
- Count()
- LongCount()
- Sum()
- Min()
- Max()
- Average()
Thoses operators usage is obvious, just keep in mind that they can take a predicate
parameter, saving a call to Where()
44
E) Base undefered operators
Aggregate operators
- Aggregate()
It’s a tricky but powerful one! The Aggregate operator performs a user-specified function on
each element of an input sequence, passing in the function’s return value from the previous
element and returning the return value of the last element.
- No seed prototype :
Fast, isn’t it?
- With seed :
45
F) Tips and tricks!
- When you cannot know the returned type of a query, do not hesitate to
use the var keyword!
- You can use Cast or OfType operators when you have to query a legacy
collection!
- In query expression, you can use the « Let » clause, that allows to query
subsets in the current query :
46
F) Tips and tricks!
- Get Linqpad!
It’s a simple ( and free! )
tool that allows you to test
your queries, your code
snippets. You can even
query the BDD :
http://www.linqpad.net/
47
V) Advanced concepts
• A) Linq To DatatSet
• B) Linq To XML
• C) Linq To SQL
48
V) Advanced concepts
• A) Linq To DatatSet
Linq to Dataset relies on the System.Data namespace part embedded in
System.Data.DataSetExtensions Assembly.
Linq to DataSet is a very useful feature when dealing with legacy code that relies on
standard ADO.NET DataSet, DataTablr, DataRow and DataColumn.
The first thing to do is to call the .AsEnumerable() extension on your DataSet or
DataTable, and this one become Linq-ready!
Linq To DataSet could be view as an extension of Linq To Object, because its matter is
to adapt specific objects to make its queryable through Linq.
49
V) Advanced concepts
• A) Linq To DatatSet
DataRow Operators :
Set operators
- Distinct()
- Except()
- Intersect()
- Union()
- SequenceEqual()
Fields Operators
- Field<T>() : obtain the value of a column from a DataRow object and handles the
casting of DBNull
- SetField<T> () : allow to change a value of a property (column) in a DataRow
50
V) Advanced concepts
• A) Linq To DatatSet
DataTable Operators :
- AsEnumerable() :
Yield an IEnumerable<DataRow>
- CopyToDataTable<DataRow>() :
Copy a set of DataRow in the targeted DataTable.
51
V) Advanced concepts
• B) Linq To XML
Linq To Xml relies on the System.Xml.Linq
Obviously, Linq To XML first intention is to query XML with Linq. But Microsoft takes
the opportunity to add a new (and waaay easier) XML API.
Indeed, when it’s about creating XML, previous API ( called W3C DOM XML API ) was
so cumbersome that most developers prefer to build XML-like strings.
Linq To XML allows to divide the amount of code needed by 3 when creating XML.
52
V) Advanced concepts
• B) Linq To XML
Here is the X-Linq Object Model :
53
V) Advanced concepts
• B) Linq To XML
XML Creation :
With X-Linq, creating Xml is very easy, thank to the fluent API.
When a full (and valid) document is needed, simply put an Xdocument as root
element :
54
V) Advanced concepts
• B) Linq To XML
XML Output:
X-Linq offers simple Save mechanism:
XDocument.Save and XElement.Save
The second one will automatically add the xml header.
XML Input :
X-Linq allow you to work with external xml document and fragement
- Load() : Allow to convert raw XML fragements into XDoc or XElt
- Parse() : Allow to convert non formarted xml strings into XDoc or Xelt
55
V) Advanced concepts
• B) Linq To XML
XML Traversal Methods:
- forward :
- XNode.NodesAfterSelf()
- XNode.ElementsAfterSelf()
- backward :
- XNode.NodesBeforeSelf()
- XNode.ElementsBeforeSelf()
- down :
- XContainer.Nodes()
- XContainer.Elements()
- XContainer.Element()
- XContainer.Descendants() recursive
- XElement.DescendantsAndSelf() recursive
- up :
- XNode.Ancestors() recursive
- XElement.AncestorsAndSelf() recursive
56
V) Advanced concepts
• B) Linq To XML
XML Traversal Properties:
- forward : XNode.NextNode
- backward : XNode.PreviousNode
- up : XObject.Document
XObject.Parent
57
V) Advanced concepts
• B) Linq To XML
X-LINQ operators:
- Ancestors()
- AncestorAndSelf()
- Attributes()
- DescendantNodes()
- DescendantNodesAndSelf()
- Descendants()
- Elements()
- InDocumentOrder()
- Remove()
58
V) Advanced concepts
• C) Linq To SQL
Linq to SQL is an API to work with MS SqlServer DBs. Its aim it to make the bridge between our
classes and the way their data are stored, and to make this bridge easier to craft and maintain.
It’s an entry-level ORM.
To enable Linq to SQL, there are some prerequisites :
- Generating the Entity classes, with SQLMetal utility, for example.
=> create classes that reflect the DB model
- Generating the XML mapping file
=> create a file that will allow to map objects into sql entries and sql queries
results into objects, automatically
59
Generating the Entity classes :
in vs command prompt
sqlmetal /namespace:nwind /code:Northwind.cs /pluralize /functions /sprocs /views <path to Northwind MDF file>
Generating the xml mapping file :
in vs command prompt
sqlmetal /map:northwindmap.xml "C:Northwind.mdf" /pluralize /functions /sprocs /views /namespace:nwind /code:Northwind.cs
V) Advanced concepts
• C) Linq To SQL
DataContext
One key concept of LINQ to SQL is the DataContext class, that establishes database
connection, holds common methods to interact with databases, holds the references
to the entities.
When using Linq To SQL, the first thing to do is to instantiate your DataContext
60
V) Advanced concepts
• C) Linq To SQL
Standard Database operations
Once your DataContext is instantiated, you can start to query it with standard Linq
queries. There is two point to keep in mind :
- Linq to SQL operators return IQueryable<T>
- Queries are translated into SQL, meaning that some advanced restriction clause
may throw exceptions at runtime, like custom user type comparison.
In the following, an example will be given in the Northwind DataContext.
61
V) Advanced concepts
• C) Linq To SQL
Standard Database operations
- Select :
- Join :
62
V) Advanced concepts
• C) Linq To SQL
Standard Database operations
- Insert :
63
V) Advanced concepts
• C) Linq To SQL
Standard Database operations
- Delete :
64
V) Advanced concepts
• C) Linq To SQL
Standard Database operations
- Update:
65
VI) Examples
• A) Build a querystring formated based on a
dictionary
• B) Convert a enum to a list of its values
• C) Extract data from legacy dataset
66
VI) Examples
A) Build a querystring formated based on a dictionary
67
VI) Examples
B) Convert a enum to a list of its values
68
VI) Examples
C) Extract data from legacy dataset
69
VII) Going Deeper !
• A) MoreLinq library
• B) DinamycLinq Library
• C) Linq To whatever : build you own IQueryable
- Steps (msdn)
- Linq to Google
- Linq to Lucene
70
VII) Going Deeper
• MoreLinq Library - Available by Nuget : Add usefull operator
71
Operator Summary
AssertCount Asserts that a source sequence contains a given count of elements.
Batch Batches the source sequence into sized buckets.
Concat Returns a sequence consisting of the head element and the given tail elements. This operator uses deferred execution and streams its results.
Consume Completely consumes the given sequence. This method uses immediate execution, and doesn't store any data during execution.
DistinctBy
Returns all distinct elements of the given source, where "distinctness" is determined via a projection and the default eqaulity comparer for
the projected type.
EquiZip Returns a projection of tuples, where each tuple contains the N-th element from each of the argument sequences.
ForEach Immediately executes the given action on each element in the source sequence.
Generate Returns a sequence of values consecutively generated by a generator function.
GenerateByIndex Returns a sequence of values based on indexes.
MaxBy Returns the maximal element of the given sequence, based on the given projection.
MinBy Returns the minimal element of the given sequence, based on the given projection.
Pad Pads a sequence with default values if it is narrower (shorter in length) than a given width.
Pipe Executes the given action on each element in the source sequence and yields it.
Prepend Prepends a single value to a sequence.
PreScan Performs a pre-scan (exclusive prefix sum) on a sequence of elements.
Scan Peforms a scan (inclusive prefix sum) on a sequence of elements.
SingleOrFallback Returns the single element in the given sequence, or the result of executing a fallback delegate if the sequence is empty.
TakeEvery Returns every N-th element of a source sequence.
ToDelimitedString Creates a delimited string from a sequence of values. The delimiter used depends on the current culture of the executing thread.
Trace Traces the elements of a source sequence for diagnostics.
Zip Returns a projection of tuples, where each tuple contains the N-th element from each of the argument sequences.
ZipLongest Returns a projection of tuples, where each tuple contains the N-th element from each of the argument sequences.
VII) Going Deeper
• Dynamic Linq Library
Library provided by Microsoft.
Allow to build dynamic linq queries, by making restriction and ordering operator
accepting string instead of lambda
Classic query
Dynamic Liq Query
Exemple from ScottGu’s blog
72
http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx
http://weblogs.asp.net/davidfowler/archive/2010/08/19/dynamic-linq-part-2-evolution.aspx
VII) Going Deeper
Linq To whatever : build you own IQueryable!
Linq is not limited to the Microsoft’s tools. You can build a Linq API to nearly
every datasource, since you create Iqueryable LINQ provider.
Numerous projects take advantage of this opportunity.
The most well known are
- LINQ to Google (GLinq) : you can query Google’s datasources easily
- Linq to Lucene : Lucene is a strong, fast, lightweight and open source text
search engine. Linq to Lucene allow you to simplify access to data indexed by
Lucene
73
Microsoft guide http://msdn.microsoft.com/en-us/library/vstudio/bb546158.aspx
GLinq : http://glinq.codeplex.com/
Linq to lucene : http://linqtolucene.codeplex.com/
VIII) Questions?
74
Find out more
• On https://techblog.betclicgroup.com/
About Betclic
• Betclic Everest Group, one of the world leaders in online gaming, has a unique portfolio
comprising various complementary international brands: Betclic, Everest Gaming, bet-at-
home.com, Expekt…
• Active in 100 countries with more than 12 million customers worldwide, the Group is
committed to promoting secure and responsible gaming and is a member of several
international professional associations including the EGBA (European Gaming and Betting
Association) and the ESSA (European Sports Security Association).
• Through our brands, Betclic Everest Group places expertise, technological know-how and
security at the heart of our strategy to deliver an on-line gaming offer attuned to the passion
of our players.

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Angular 2.0 forms
Angular 2.0 formsAngular 2.0 forms
Angular 2.0 forms
 
Jquery
JqueryJquery
Jquery
 
Angular 8
Angular 8 Angular 8
Angular 8
 
Angular - Chapter 4 - Data and Event Handling
 Angular - Chapter 4 - Data and Event Handling Angular - Chapter 4 - Data and Event Handling
Angular - Chapter 4 - Data and Event Handling
 
Understanding linq
Understanding linqUnderstanding linq
Understanding linq
 
Jsp ppt
Jsp pptJsp ppt
Jsp ppt
 
Introduction to Angularjs
Introduction to AngularjsIntroduction to Angularjs
Introduction to Angularjs
 
Angularjs PPT
Angularjs PPTAngularjs PPT
Angularjs PPT
 
Collections and its types in C# (with examples)
Collections and its types in C# (with examples)Collections and its types in C# (with examples)
Collections and its types in C# (with examples)
 
Angular Advanced Routing
Angular Advanced RoutingAngular Advanced Routing
Angular Advanced Routing
 
C# in depth
C# in depthC# in depth
C# in depth
 
Collections - Maps
Collections - Maps Collections - Maps
Collections - Maps
 
C# classes objects
C#  classes objectsC#  classes objects
C# classes objects
 
jQuery from the very beginning
jQuery from the very beginningjQuery from the very beginning
jQuery from the very beginning
 
C# 101: Intro to Programming with C#
C# 101: Intro to Programming with C#C# 101: Intro to Programming with C#
C# 101: Intro to Programming with C#
 
Angular Data Binding
Angular Data BindingAngular Data Binding
Angular Data Binding
 
ASP.NET Web form
ASP.NET Web formASP.NET Web form
ASP.NET Web form
 
Angular
AngularAngular
Angular
 
Basics of JavaScript
Basics of JavaScriptBasics of JavaScript
Basics of JavaScript
 
Spring Boot and REST API
Spring Boot and REST APISpring Boot and REST API
Spring Boot and REST API
 

Destacado

Destacado (9)

Linq
LinqLinq
Linq
 
Introduccion a LINQ
Introduccion a LINQIntroduccion a LINQ
Introduccion a LINQ
 
Module 3: Introduction to LINQ (PowerPoint Slides)
Module 3: Introduction to LINQ (PowerPoint Slides)Module 3: Introduction to LINQ (PowerPoint Slides)
Module 3: Introduction to LINQ (PowerPoint Slides)
 
Linq in C# 3.0: An Overview
Linq in C# 3.0: An OverviewLinq in C# 3.0: An Overview
Linq in C# 3.0: An Overview
 
Programación con linq
Programación con linqProgramación con linq
Programación con linq
 
Introducing LINQ
Introducing LINQIntroducing LINQ
Introducing LINQ
 
Linq
LinqLinq
Linq
 
Task Parallel Library 2014
Task Parallel Library 2014Task Parallel Library 2014
Task Parallel Library 2014
 
Web Applications Development with MEAN Stack
Web Applications Development with MEAN StackWeb Applications Development with MEAN Stack
Web Applications Development with MEAN Stack
 

Similar a LINQ

49.INS2065.Computer Based Technologies.TA.NguyenDucAnh.pdf
49.INS2065.Computer Based Technologies.TA.NguyenDucAnh.pdf49.INS2065.Computer Based Technologies.TA.NguyenDucAnh.pdf
49.INS2065.Computer Based Technologies.TA.NguyenDucAnh.pdf
cNguyn506241
 
C#3.0 & Vb 9.0 New Features
C#3.0 & Vb 9.0 New FeaturesC#3.0 & Vb 9.0 New Features
C#3.0 & Vb 9.0 New Features
techfreak
 
Using advanced C# features in Sharepoint development
Using advanced C# features in Sharepoint developmentUsing advanced C# features in Sharepoint development
Using advanced C# features in Sharepoint development
sadomovalex
 
Internship Report
Internship ReportInternship Report
Internship Report
Jiali Chen
 
1 introduction
1   introduction1   introduction
1 introduction
Ngeam Soly
 

Similar a LINQ (20)

Module 3: Introduction to LINQ (Material)
Module 3: Introduction to LINQ (Material)Module 3: Introduction to LINQ (Material)
Module 3: Introduction to LINQ (Material)
 
49.INS2065.Computer Based Technologies.TA.NguyenDucAnh.pdf
49.INS2065.Computer Based Technologies.TA.NguyenDucAnh.pdf49.INS2065.Computer Based Technologies.TA.NguyenDucAnh.pdf
49.INS2065.Computer Based Technologies.TA.NguyenDucAnh.pdf
 
Reactive Microservices with Spring 5: WebFlux
Reactive Microservices with Spring 5: WebFlux Reactive Microservices with Spring 5: WebFlux
Reactive Microservices with Spring 5: WebFlux
 
Current & Future Use-Cases of OpenDaylight
Current & Future Use-Cases of OpenDaylightCurrent & Future Use-Cases of OpenDaylight
Current & Future Use-Cases of OpenDaylight
 
C#3.0 & Vb 9.0 New Features
C#3.0 & Vb 9.0 New FeaturesC#3.0 & Vb 9.0 New Features
C#3.0 & Vb 9.0 New Features
 
Linq tools
Linq toolsLinq tools
Linq tools
 
Object Oriented Concepts and Principles
Object Oriented Concepts and PrinciplesObject Oriented Concepts and Principles
Object Oriented Concepts and Principles
 
Intro lift
Intro liftIntro lift
Intro lift
 
MuleSoft Manchester Meetup #3 slides 31st March 2020
MuleSoft Manchester Meetup #3 slides 31st March 2020MuleSoft Manchester Meetup #3 slides 31st March 2020
MuleSoft Manchester Meetup #3 slides 31st March 2020
 
.net Framework
.net Framework.net Framework
.net Framework
 
A Tour of Ruby On Rails
A Tour of Ruby On RailsA Tour of Ruby On Rails
A Tour of Ruby On Rails
 
Using advanced C# features in Sharepoint development
Using advanced C# features in Sharepoint developmentUsing advanced C# features in Sharepoint development
Using advanced C# features in Sharepoint development
 
Smart Migration to JDK 8
Smart Migration to JDK 8Smart Migration to JDK 8
Smart Migration to JDK 8
 
Internship Report
Internship ReportInternship Report
Internship Report
 
1 introduction
1   introduction1   introduction
1 introduction
 
Java 8 - An Overview
Java 8 - An OverviewJava 8 - An Overview
Java 8 - An Overview
 
LINQ 2 SQL Presentation To Palmchip And Trg, Technology Resource Group
LINQ 2 SQL Presentation To Palmchip  And Trg, Technology Resource GroupLINQ 2 SQL Presentation To Palmchip  And Trg, Technology Resource Group
LINQ 2 SQL Presentation To Palmchip And Trg, Technology Resource Group
 
Principles of MVC for Rails Developers
Principles of MVC for Rails DevelopersPrinciples of MVC for Rails Developers
Principles of MVC for Rails Developers
 
Caffe2
Caffe2Caffe2
Caffe2
 
Linq in C#
Linq in C#Linq in C#
Linq in C#
 

Más de Betclic Everest Group Tech Team

Más de Betclic Everest Group Tech Team (20)

Mini training - Reactive Extensions (Rx)
Mini training - Reactive Extensions (Rx)Mini training - Reactive Extensions (Rx)
Mini training - Reactive Extensions (Rx)
 
Mini training - Moving to xUnit.net
Mini training - Moving to xUnit.netMini training - Moving to xUnit.net
Mini training - Moving to xUnit.net
 
Mini training - Introduction to Microsoft Azure Storage
Mini training - Introduction to Microsoft Azure StorageMini training - Introduction to Microsoft Azure Storage
Mini training - Introduction to Microsoft Azure Storage
 
Akka.Net
Akka.NetAkka.Net
Akka.Net
 
Mini training- Scenario Driven Design
Mini training- Scenario Driven DesignMini training- Scenario Driven Design
Mini training- Scenario Driven Design
 
Email Management in Outlook
Email Management in OutlookEmail Management in Outlook
Email Management in Outlook
 
Mini-Training: SSO with Windows Identity Foundation
Mini-Training: SSO with Windows Identity FoundationMini-Training: SSO with Windows Identity Foundation
Mini-Training: SSO with Windows Identity Foundation
 
Training - What is Performance ?
Training  - What is Performance ?Training  - What is Performance ?
Training - What is Performance ?
 
Mini-Training: Docker
Mini-Training: DockerMini-Training: Docker
Mini-Training: Docker
 
Mini Training Flyway
Mini Training FlywayMini Training Flyway
Mini Training Flyway
 
Mini-Training: NDepend
Mini-Training: NDependMini-Training: NDepend
Mini-Training: NDepend
 
Management 3.0 Workout
Management 3.0 WorkoutManagement 3.0 Workout
Management 3.0 Workout
 
Lean for Business
Lean for BusinessLean for Business
Lean for Business
 
Short-Training asp.net vNext
Short-Training asp.net vNextShort-Training asp.net vNext
Short-Training asp.net vNext
 
Training – Going Async
Training – Going AsyncTraining – Going Async
Training – Going Async
 
Mini-Training: Mobile UX Trends
Mini-Training: Mobile UX TrendsMini-Training: Mobile UX Trends
Mini-Training: Mobile UX Trends
 
Training: MVVM Pattern
Training: MVVM PatternTraining: MVVM Pattern
Training: MVVM Pattern
 
Mini-training: Personalization & Recommendation Demystified
Mini-training: Personalization & Recommendation DemystifiedMini-training: Personalization & Recommendation Demystified
Mini-training: Personalization & Recommendation Demystified
 
Mini-training: Let’s Git It!
Mini-training: Let’s Git It!Mini-training: Let’s Git It!
Mini-training: Let’s Git It!
 
AngularJS Best Practices
AngularJS Best PracticesAngularJS Best Practices
AngularJS Best Practices
 

Último

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Último (20)

Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 

LINQ

  • 2. Agenda  A brief history…  What is LINQ ?  C# language enhancements  Base concepts  Advanced concepts  Examples  Going deeper?  Questions 2
  • 3. I) A brief history…
  • 4. ODBC & DAO • ODBC (Open DataBase Connectivity): - released in 1992 by Microsoft, for Windows systems, based on the SQL Access Group Specification - Middleware dedicated to manipulate Databases - Full software, with UI, API and drivers for all the SGBD on the market - Latest version : 3.0 , released on 1999 • Data Access Object - API created to consume ODBC with VB At this time, industry began to push « object-oriented, distributed, componentized software » : Microsoft needed to add a new data access for its COM response to Object Management Group’s CORBA. 4For more info, see http://blogs.msdn.com/b/data/archive/2006/12/05/data-access-api-of-the-day-part-i.aspx
  • 5. OLE DB & ADO • Object Linking and Embedding - Designed to be the principal data access layer for the COM universe. - Offers a « componentized » data access interface, able to work both with DBs (query result, table, view..) text files, Excel files, registery, email… - Sources have a common data representation - Low level interface => needs a wrapper API to be used : ADO • ActiveX Data Oject - Use the same model than DAO, and add a Disconnected mode, base on a foreward only cursor. And then, MS started .NET framework project to counter Java… 5 For more info, see http://blogs.msdn.com/b/data/archive/2006/12/13/data-access-api-of-the-day-part-ii-componentizing-data- access.aspx
  • 6. ADO.NET In 1998, « COM3 » project, that became .Net framework was launched. With Internet and XML rise, it became obvious that the framework should embed a dedicated data access framework, that could deal both with asynchronous remote connections and local (server) data computing. 6 For more info, see http://blogs.msdn.com/b/data/archive/2006/12/22/data-access-api-of-the-day-part-iii-disconnected- programming-in-a-managed-environment.aspx
  • 7. Linq & ADO.NET Entities ADO.NET Entities is built on top of ADO.NET. The main idea was to develop applications relying on a conceptual model rather than a relationnal DB schema. The approach of ADO.NET Entities is entirely client-sided, which means that databases don’t need any modification to work with, once an ADO.NET provider exists. Another main advantage is that an application emits standard SQL, so it’s manageable, verifiable and readable. 7For more infos, see http://blogs.msdn.com/b/data/archive/2007/01/23/data-access-api-of-the-day-_2800_part-iv_2900_.aspx
  • 8. II) What is LINQ ?
  • 9. Linq is about data queries The most important part of Linq is about getting sequences from data sources. By default, the data sources that can be requested by Linq are : - Object (Linq to Objects) - XML fragments or docs (Linq to XML) - ADO.NET DataSet ( Linq to DataSet) - Sql Server (Linq to SQL) - Entity Framework (Linq to Entities) In theory, every kind of data source can be handled by Linq, with custom Linq providers ( as Linq to Google or Linq to Lucene) 9 Ressources to create your own linq provider: http://msdn.microsoft.com/en-us/library/vstudio/bb546158.aspx http://msdn.microsoft.com/en-us/library/system.linq.expressions.expressionvisitor.aspx
  • 10. Linq can do more than queries You can use LINQ to transform set of data : - Convert your data : 10
  • 11. - Transform your data : 11
  • 12. III) C# language enhancements • A) Lambda Expressions • B) Expression Trees • C) ‘var’, object and collection initialization and anonymous types • D) Extensions methods • E) Partial Methods • F) Query expression 12
  • 13. A) Lambda Expressions : get rid of delegates Base Code : 13
  • 14. A) Lambda Expressions : get rid of delegates - Old fashionned : named methods The first way that allowed developers to customize the behavior of a core class without having to use inheritance was to expose delegates and use it inside the core method. Here, we are explicitly declaring the delegate filter we want to use : 14
  • 15. A) Lambda Expressions : get rid of delegates - A step further : anonymous methods In framework 2.0, this feature was added in order to reduce amount of code needed : Indeed, if the delegate is used only once, there is no need to expose it. But it remains verbose and hard to read. 15
  • 16. A) Lambda Expressions : get rid of delegates - Linq fashion : Lambda Here, the delegate is subtituted by a Lambda. Lambda expression is a concept coming from functionnal programming, and that provides shorthand for specifying an algorithm. Lambda expressions are specified as a comma-delimited list of parameters followed by the lambda operator, followed by an expression or statement block (param1, param2, …paramN) => expr (param1, param2, …paramN) => { statement1; return (lambda_expression_return_type); } 16
  • 17. B) Expression trees • Tree-like data structure. • Almost used to implement new Linq provider Usefull concept to represent the lambda algorythms. Heavily used behind the scene by Linq, not part of this training. 17 http://msdn.microsoft.com/en-us/library/bb397951.aspx http://geekswithblogs.net/Martinez/archive/2009/06/29/understanding-expression-trees.aspx http://www.codeproject.com/Articles/235860/Expression-Tree-Basics
  • 18. C) ‘var’, object and collection initialization and anonymous types - Object initialisation : Short hand to instantiate objects : Allows to initialize object’s values at instantiation time. To use this feature, a class should have an accessible constructor. 18
  • 19. C) ‘var’, object and collection initialization and anonymous types - Collections Initialisation Allows to initialize collection of object values at instantiation time. To use this feature, a collection class should have an accessible constructor. 19
  • 20. D) Extensions methods - Extensions methods aim to extend behavior of a class, by adding features without modifying the base type. - An extension method is a static method of a static class that take as first parameter an instance of the extended type prefixed by the « this » keyword. Call : Linq is heavily based on extensions, that target in particular IEnumerable and IQueryable interfaces, 20
  • 21. E) Partial Methods Lightweight event-handling mechanism. gives Adding a partial method gives 21
  • 22. E) Partial Methods More efficient than inheritance to allow many potentially unimplemented hooks in code. This feature is heavily used by Linq to Entities code generator, to make generated entities more usables, • Partial methods must be defined and implemented only in partial classes. • Partial methods must specify the partial modifier. • Partial methods are private but must not specify the private modifier, or a compiler error will result. • Partial methods must return void. • Partial methods may be unimplemented. • Partial methods may be static. • Partial methods may have arguments. 22
  • 23. F) Query expression • Query expression is a paradigm shift that allows to run queries against sets of data in a near SQL fashion : - first line represent the targeted dataset. - second line abstracts a WHERE clause. - third line show the projection clause. - last line executes the query. Fluent linq api version : Some Linq operators are available only in query expression syntax. Standard and query syntax can be mixed. In some case, the query expression syntax is more understable than fluent API 23
  • 24. IV) Base Concepts • A) Linq to object • B) Func<> delegate • C) Defered vs Undefered operators • D) Base defered operators • E) Base undefered operators • F) Tips and tricks! 24
  • 25. A) Linq to Objects - Linq to Objects is the base functionnality of Linq. - It targets sequences of objects (collections, lists, arrays) and yields most often IEnumerable<T> (undefered operators) or IQueryable<T> (defered operators) - Linq to Objects functiunalities are under the System.Linq namespace 25
  • 26. B) Func<> delegates A lot of Linq operators take a Func<> parameter. For example, check the Where operator : This type allow to wrap a delegate function, in lambda expression form. 26
  • 27. C) Defered vs Undefered operators Defered operators don’t execute queries until explicitly asked. Futhermore, they return a query, not the result of query : Gives the following result : As you can see, each time that maleEmployees is enumerated, the query is executed. 27
  • 28. C) Defered vs Undefered operators Unefered operators exucute queries directly. Here .ToList() operator is an undefered one Gives the following result : maleEmployees will not change when adding a new entry to employees 28
  • 29. D) Base defered operators Restriction - Where Projection - Select - SelectMany Partitioning - Take - TakeWhile - Skip - SkipWhile Concatenation - Concat Set - Distinct - Union - Intersect - Except Conversion - Cast - OfType - AsEnumrable Element - DefaultIfEmpty Generation - Range - Repeat - Empty 29 Sorting - OrderBy - OrderByDescending - ThenBy - ThenByDescending - Reverse Join - Join - GroupJoin Grouping - GroupBy
  • 30. D) Base defered operators Where() operator Is used to refine data following the passed predicate Has two prototypes : Only the predicate differs. The second one pass the item index to the predicate : In a general way, several Linq operators offer an additionnal « predicate with index » prototype, check out the System.Linq namespace of System.Core assembly in the Object Explorer! 30
  • 31. D) Base defered operators Projection operators - Select : This operator aim is to specify and cutomize the output of a query. will return an IEnumerable<String>. When used without selector simply return the full object - SelectMany : Is used to create one-to-many sequences, It always takes a selector parameter. 31
  • 32. D) Base defered operators Partitioning Operators : - Take() - TakeWhile() - Skip() - SkipWhile() Thoses operators allow to split sequences easily, for paging purpose, for example. 32
  • 33. D) Base defered operators Concatenation: - Concat() : It allows to simply concat sequences of the same type: 33
  • 34. D) Base defered operators Ordering: Those operators allow to simply order sequences. - OrderBy() and OrderByDescending() : Return IOrderedEnumerable<T> and cannot take IOrderedEnumerable<T> parameter - ThenBy() end ThenByDescending() : Return IOrderedEnumerable<T> and must take IOrderedEnumerable<T> parameter Each one has an additionnal prototype taking an IComparer, if a custom ordering is needed - Reverse() : Simply output a reversed sequence. 34
  • 35. D) Base defered operators Joining: - Join() It performs an equi-join between sequences : - GroupJoin() Perform a join between sequences, and enumerates the inner sequence 35
  • 36. D) Base defered operators Set operators Thoses operators are used to perform mathematical set-type operations on sequences - Distinct() : Removes duplicates elements in sequence - Union() : Yields element of input sequences, and then yields element of second sequence that are not in the first one - Intersect() : Yields elements that are in both sequences - Except() : Yields the elements of the input sequence that are not in the 2nd one 36
  • 37. D) Base defered operators Conversion operators - Cast() - OfType() : Cast() and OfType target non-generic Ienumerable interface, in order to open Linq functionnalities to legacy collections. Cast() will throw an exception if it cannot cast an element of the input sequence, while OfType will simply ignore the uncastable elements - AsEnumrable() : Cast a sequence into a normal IEnumerable<T> in order to use standard Linq operators. For example, Select() in Linq To SQL returns IQueryable<T> that don’t implement the Reverse() operator, 37
  • 38. D) Base defered operators Element operator - DefaultIfEmpty() This operator will generate a default element if the output sequence is empty. Basically, it avoids the System.InvalidOperationException: Sequence contains no elements 38
  • 39. D) Base defered operators Generation operators - Range() Static method (not a extension) that generates a sequence of integers, - Repeat() Its generates a sequence of the same specified element. - Empty() Static method (not a extension) that generates an empty sequence of the requested type 39
  • 40. E) Base undefered operators Conversion - ToArray - ToList - ToDictionary - ToLookup Element - First - FirstOrDefault - Last - LastOrDefault - Single - SingleOrDefault - ElementAt - ElementAtOrDefault Quantifiers - Any - All - Contains Equality - SequenceEqual Aggregate - Count - LongCount - Sum - Min - Max - Average - Aggregate 40
  • 41. E) Base undefered operators Conversion operators - ToArray() : Take an IEnumrable<T> and return an array T[]. - ToList() : Take an IEnumrable<T> and return a List<T>. - ToDictionary() - ToLookup() : Have the same prototypes, and rely on Func<> to select Keys and Elements : 41
  • 42. E) Base undefered operators Element Operators - First - FirstOrDefault - Last - LastOrDefault - Single - SingleOrDefault - ElementAt - ElementAtOrDefault Self speaking methods. Just keep in mind that the « OrDefault » version will generate a default element if no element is found whereas classic version will throw an exception. 42
  • 43. E) Base undefered operators Quantifiers Operators - Any() Returns true if at least one element of the sequnce match the predicate - All() Returns true if all elements of the sequnce match the predicate - Contains() Returns true if the sequence contains the parameter item. Equality operator - SequenceEqual() It determines whether two input sequences are equal. 43
  • 44. E) Base undefered operators Aggregate operators - Count() - LongCount() - Sum() - Min() - Max() - Average() Thoses operators usage is obvious, just keep in mind that they can take a predicate parameter, saving a call to Where() 44
  • 45. E) Base undefered operators Aggregate operators - Aggregate() It’s a tricky but powerful one! The Aggregate operator performs a user-specified function on each element of an input sequence, passing in the function’s return value from the previous element and returning the return value of the last element. - No seed prototype : Fast, isn’t it? - With seed : 45
  • 46. F) Tips and tricks! - When you cannot know the returned type of a query, do not hesitate to use the var keyword! - You can use Cast or OfType operators when you have to query a legacy collection! - In query expression, you can use the « Let » clause, that allows to query subsets in the current query : 46
  • 47. F) Tips and tricks! - Get Linqpad! It’s a simple ( and free! ) tool that allows you to test your queries, your code snippets. You can even query the BDD : http://www.linqpad.net/ 47
  • 48. V) Advanced concepts • A) Linq To DatatSet • B) Linq To XML • C) Linq To SQL 48
  • 49. V) Advanced concepts • A) Linq To DatatSet Linq to Dataset relies on the System.Data namespace part embedded in System.Data.DataSetExtensions Assembly. Linq to DataSet is a very useful feature when dealing with legacy code that relies on standard ADO.NET DataSet, DataTablr, DataRow and DataColumn. The first thing to do is to call the .AsEnumerable() extension on your DataSet or DataTable, and this one become Linq-ready! Linq To DataSet could be view as an extension of Linq To Object, because its matter is to adapt specific objects to make its queryable through Linq. 49
  • 50. V) Advanced concepts • A) Linq To DatatSet DataRow Operators : Set operators - Distinct() - Except() - Intersect() - Union() - SequenceEqual() Fields Operators - Field<T>() : obtain the value of a column from a DataRow object and handles the casting of DBNull - SetField<T> () : allow to change a value of a property (column) in a DataRow 50
  • 51. V) Advanced concepts • A) Linq To DatatSet DataTable Operators : - AsEnumerable() : Yield an IEnumerable<DataRow> - CopyToDataTable<DataRow>() : Copy a set of DataRow in the targeted DataTable. 51
  • 52. V) Advanced concepts • B) Linq To XML Linq To Xml relies on the System.Xml.Linq Obviously, Linq To XML first intention is to query XML with Linq. But Microsoft takes the opportunity to add a new (and waaay easier) XML API. Indeed, when it’s about creating XML, previous API ( called W3C DOM XML API ) was so cumbersome that most developers prefer to build XML-like strings. Linq To XML allows to divide the amount of code needed by 3 when creating XML. 52
  • 53. V) Advanced concepts • B) Linq To XML Here is the X-Linq Object Model : 53
  • 54. V) Advanced concepts • B) Linq To XML XML Creation : With X-Linq, creating Xml is very easy, thank to the fluent API. When a full (and valid) document is needed, simply put an Xdocument as root element : 54
  • 55. V) Advanced concepts • B) Linq To XML XML Output: X-Linq offers simple Save mechanism: XDocument.Save and XElement.Save The second one will automatically add the xml header. XML Input : X-Linq allow you to work with external xml document and fragement - Load() : Allow to convert raw XML fragements into XDoc or XElt - Parse() : Allow to convert non formarted xml strings into XDoc or Xelt 55
  • 56. V) Advanced concepts • B) Linq To XML XML Traversal Methods: - forward : - XNode.NodesAfterSelf() - XNode.ElementsAfterSelf() - backward : - XNode.NodesBeforeSelf() - XNode.ElementsBeforeSelf() - down : - XContainer.Nodes() - XContainer.Elements() - XContainer.Element() - XContainer.Descendants() recursive - XElement.DescendantsAndSelf() recursive - up : - XNode.Ancestors() recursive - XElement.AncestorsAndSelf() recursive 56
  • 57. V) Advanced concepts • B) Linq To XML XML Traversal Properties: - forward : XNode.NextNode - backward : XNode.PreviousNode - up : XObject.Document XObject.Parent 57
  • 58. V) Advanced concepts • B) Linq To XML X-LINQ operators: - Ancestors() - AncestorAndSelf() - Attributes() - DescendantNodes() - DescendantNodesAndSelf() - Descendants() - Elements() - InDocumentOrder() - Remove() 58
  • 59. V) Advanced concepts • C) Linq To SQL Linq to SQL is an API to work with MS SqlServer DBs. Its aim it to make the bridge between our classes and the way their data are stored, and to make this bridge easier to craft and maintain. It’s an entry-level ORM. To enable Linq to SQL, there are some prerequisites : - Generating the Entity classes, with SQLMetal utility, for example. => create classes that reflect the DB model - Generating the XML mapping file => create a file that will allow to map objects into sql entries and sql queries results into objects, automatically 59 Generating the Entity classes : in vs command prompt sqlmetal /namespace:nwind /code:Northwind.cs /pluralize /functions /sprocs /views <path to Northwind MDF file> Generating the xml mapping file : in vs command prompt sqlmetal /map:northwindmap.xml "C:Northwind.mdf" /pluralize /functions /sprocs /views /namespace:nwind /code:Northwind.cs
  • 60. V) Advanced concepts • C) Linq To SQL DataContext One key concept of LINQ to SQL is the DataContext class, that establishes database connection, holds common methods to interact with databases, holds the references to the entities. When using Linq To SQL, the first thing to do is to instantiate your DataContext 60
  • 61. V) Advanced concepts • C) Linq To SQL Standard Database operations Once your DataContext is instantiated, you can start to query it with standard Linq queries. There is two point to keep in mind : - Linq to SQL operators return IQueryable<T> - Queries are translated into SQL, meaning that some advanced restriction clause may throw exceptions at runtime, like custom user type comparison. In the following, an example will be given in the Northwind DataContext. 61
  • 62. V) Advanced concepts • C) Linq To SQL Standard Database operations - Select : - Join : 62
  • 63. V) Advanced concepts • C) Linq To SQL Standard Database operations - Insert : 63
  • 64. V) Advanced concepts • C) Linq To SQL Standard Database operations - Delete : 64
  • 65. V) Advanced concepts • C) Linq To SQL Standard Database operations - Update: 65
  • 66. VI) Examples • A) Build a querystring formated based on a dictionary • B) Convert a enum to a list of its values • C) Extract data from legacy dataset 66
  • 67. VI) Examples A) Build a querystring formated based on a dictionary 67
  • 68. VI) Examples B) Convert a enum to a list of its values 68
  • 69. VI) Examples C) Extract data from legacy dataset 69
  • 70. VII) Going Deeper ! • A) MoreLinq library • B) DinamycLinq Library • C) Linq To whatever : build you own IQueryable - Steps (msdn) - Linq to Google - Linq to Lucene 70
  • 71. VII) Going Deeper • MoreLinq Library - Available by Nuget : Add usefull operator 71 Operator Summary AssertCount Asserts that a source sequence contains a given count of elements. Batch Batches the source sequence into sized buckets. Concat Returns a sequence consisting of the head element and the given tail elements. This operator uses deferred execution and streams its results. Consume Completely consumes the given sequence. This method uses immediate execution, and doesn't store any data during execution. DistinctBy Returns all distinct elements of the given source, where "distinctness" is determined via a projection and the default eqaulity comparer for the projected type. EquiZip Returns a projection of tuples, where each tuple contains the N-th element from each of the argument sequences. ForEach Immediately executes the given action on each element in the source sequence. Generate Returns a sequence of values consecutively generated by a generator function. GenerateByIndex Returns a sequence of values based on indexes. MaxBy Returns the maximal element of the given sequence, based on the given projection. MinBy Returns the minimal element of the given sequence, based on the given projection. Pad Pads a sequence with default values if it is narrower (shorter in length) than a given width. Pipe Executes the given action on each element in the source sequence and yields it. Prepend Prepends a single value to a sequence. PreScan Performs a pre-scan (exclusive prefix sum) on a sequence of elements. Scan Peforms a scan (inclusive prefix sum) on a sequence of elements. SingleOrFallback Returns the single element in the given sequence, or the result of executing a fallback delegate if the sequence is empty. TakeEvery Returns every N-th element of a source sequence. ToDelimitedString Creates a delimited string from a sequence of values. The delimiter used depends on the current culture of the executing thread. Trace Traces the elements of a source sequence for diagnostics. Zip Returns a projection of tuples, where each tuple contains the N-th element from each of the argument sequences. ZipLongest Returns a projection of tuples, where each tuple contains the N-th element from each of the argument sequences.
  • 72. VII) Going Deeper • Dynamic Linq Library Library provided by Microsoft. Allow to build dynamic linq queries, by making restriction and ordering operator accepting string instead of lambda Classic query Dynamic Liq Query Exemple from ScottGu’s blog 72 http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx http://weblogs.asp.net/davidfowler/archive/2010/08/19/dynamic-linq-part-2-evolution.aspx
  • 73. VII) Going Deeper Linq To whatever : build you own IQueryable! Linq is not limited to the Microsoft’s tools. You can build a Linq API to nearly every datasource, since you create Iqueryable LINQ provider. Numerous projects take advantage of this opportunity. The most well known are - LINQ to Google (GLinq) : you can query Google’s datasources easily - Linq to Lucene : Lucene is a strong, fast, lightweight and open source text search engine. Linq to Lucene allow you to simplify access to data indexed by Lucene 73 Microsoft guide http://msdn.microsoft.com/en-us/library/vstudio/bb546158.aspx GLinq : http://glinq.codeplex.com/ Linq to lucene : http://linqtolucene.codeplex.com/
  • 75. Find out more • On https://techblog.betclicgroup.com/
  • 76. About Betclic • Betclic Everest Group, one of the world leaders in online gaming, has a unique portfolio comprising various complementary international brands: Betclic, Everest Gaming, bet-at- home.com, Expekt… • Active in 100 countries with more than 12 million customers worldwide, the Group is committed to promoting secure and responsible gaming and is a member of several international professional associations including the EGBA (European Gaming and Betting Association) and the ESSA (European Sports Security Association). • Through our brands, Betclic Everest Group places expertise, technological know-how and security at the heart of our strategy to deliver an on-line gaming offer attuned to the passion of our players.