Download ppt - Applied Linq

Transcript
Page 1: Applied  Linq
Page 2: Applied  Linq

Applied Linq

Putting Linq to work

Page 3: Applied  Linq

Introducing…

• Class-A• Kennisprovider Microsoft development• Training• Coaching• http://www.class-a.nl

• Alex Thissen• Trainer/coach• http://blog.alexthissen.nl

Page 4: Applied  Linq

Agenda

• About Linq and queries• Query providers and APIs• What it means to apply Linq

– Language and code– Query execution– Recommendations– Architecture

• Beyond Linq• Demos• Questions and discussion

Page 5: Applied  Linq

Dim query = From c In customers _ Where c.Orders.Count > 100 _ Order By c.CompanyName Descending _ Select c

Introducing Linq

• Uniform way to write queries over data• Linq is about query keywords

– Built into new languages C# 3.0 and VB 9.0• Linq is about query operators

– 40+ standard query operators are defined– Methods that operate in queries or act on its results

var query = from c in customers where c.Orders.Count > 100 orderby c.CompanyName descending select c;

Page 6: Applied  Linq

About Linq queries

• Expressed in terms of CLR types– Objects that might or might not exist in-memory

• Linq queries are not SQL queries at all• Compositional and hierarchical by nature

– Arbitrary nesting of queries– Additional operators can be applied to query

• Declarative instead of imperative– Tell what you want, not how– How is up to underlying implementation

Page 7: Applied  Linq

Writing queries

• Learn the keywords and operators– Not all operators have corresponding keywords or

language integration– Number of keywords may vary per language

• Some parts must be written with operators– Usually exposes lambda expressions

• Queries can be done without keywords– Explicit dot notation (what compiler creates)– Sometimes FLWOS is overkill

Page 8: Applied  Linq

Demos

Getting familiar with Linq queries– Query operations: selection, projection, grouping– Using keywords and operators

Page 9: Applied  Linq

Sources of data

• Your data must come from somewhere

1. In-memory CLR objects

2. Database

3. XML

4. Other repositories: registry, Active Directory, …• Various flavors of Linq disclose certain type of

data• Query syntax does not change per source

– Set of keywords and operators available might be different

Page 10: Applied  Linq

Linq to XML

• Power of Linq brought to data in XML format

1. Perform queries over XML data

2. New element-centric API to manipulate XML• Faster alternative to System.Xml DOM API

3. Functional construction of XML data with query expressions

Page 11: Applied  Linq

Linq to SQL

• Generates object model to represent data• Mapping of CLR types to database tables

– Object/Relational Mapping (OR/M) technology– 1:1 relationships between objects and tables– Translates Linq queries to SQL statements

• Builds on ADO.NET and .NET Transactions• Persistence services

– Automatic change tracking and identity management of objects

– Updates by SQL statements or stored procedures

Page 12: Applied  Linq

Two kinds of Linq

Enumerable types Queryable types

Execution Local in-memory Usually remote

Implementation Iterators using yield return

Expression tree parsing

Interface IEnumerable<T> IQueryable<T>

Providers Linq to Objects

Linq to SQL Entities (after 3.5)

Other APIs Linq to XML DataSets

Page 13: Applied  Linq

Query providers

• Out-of-the-box providers in .NET 3.5:– Linq to Objects– Linq to SQL

• Sources in query determine query providers– Affects keywords and operators you can use

• Query providers can translate Linq queries to some implementation

• Most providers come with Linq-enabled APIs– New object models to work with data– Linq to Objects has several: Linq to XML, DataSets

Page 14: Applied  Linq

Demo

Linq applied

Scenario: WCF services using untyped Messages

WPF ApplicationWPF Application WCF ServiceWCF Service

WCF proxyWCF proxy

SOAP messages

Linq to XML APILinq to XML API

Linq to SQLLinq to SQL

Linq to XMLLinq to XML

Page 15: Applied  Linq

New language features C# and VB

• Linq keywords• Extension methods• Lambda expressions• Local variable inference• Object and collection initializers• Anonymous types

• Automatic properties• Partial methods

newnew

Page 16: Applied  Linq

Visual Basic 9.0

• Deep XML support– Express XPath axes with XML properties

– Allows XML literals to appear inside of code

root.<Customer> Direct child elementscustomer.@CompanyID Attribute selectiondoc...<description> All descendants

Dim fragment As XElement = _ <company> <city>Hedel</city> </company>

Page 17: Applied  Linq

Visual Basic 9.0

– Gives you “expression holes” inside XML literals

• Additional keywords• More freedom on order of keywords

Dim query = _ From c In doc...<Customers> _ Select <customer ID=<%= c.@CustomerID %> > <%= customer.<Name> %> phone:<%= customer...<Phone>(0) %> </customer>

Page 18: Applied  Linq

Demo

Visual Basic – WCF sample revisited– Deep XML support

Page 19: Applied  Linq

Deferred execution

• Most Linq query providers are implemented using lazy evaluation

• Composed query expressions do not execute immediately

• Queries only execute when necessary– Performing an iteration over resultset– Using extension methods ToArray, ToList,

ToLookup, ToDictionary– Using specific query operators, such as

aggregates and set operators

Page 20: Applied  Linq

More on deferred execution

• Before execution queries can still be changed or expanded– Adding additional sequence operators, such as

Distinct, Skip, Take– Manipulating expression tree

• Expression trees are immutable• Reference assignments take deep tree copies

Page 21: Applied  Linq

Changes to way you write code

• Declarative– Far less looping constructs visible– Easier to read and to maintain

• Methods returning query or its results– Remember deferred execution– Force execution of query– Hand over query for further manipulation– Query reuse

Page 22: Applied  Linq

Linq and architecture

System.Data.Linq

Page 23: Applied  Linq

Architecture recommendations

• Find out where and how your queries execute– Moment of execution– Local versus remote execution– Physical place/tier of query execution

• Keep queries inside assemblies– Do not pass query expressions between layers

• Anonymous types shouldn’t be return values– Think about important types up front– Use projections wisely

Page 24: Applied  Linq

Other recommendations

• Learn:– to write queries with and without keywords– new language features

• Use whitepapers as reference– Translation of query keywords to operators– Evaluation details of operators

• Do not overuse or abuse var keyword– Decreases readability and stops you from thinking:

if you know exact type, specify it– It sometimes takes more keystrokes

Page 25: Applied  Linq

Runtimes and frameworks for Linq

Linq to .NET FX 3.5

Compact FX 3.5 Silverlight 1.1

Objects X X X

SQL X

Entities X

DataSets X X

XML X X X

pro

vid

ers

APIs

* ADO.NET Entity Framework released out of bounds with .NET FX 3.5

*

Page 26: Applied  Linq

Beyond .NET FX 3.5

• ADO.NET Entity Framework – Microsoft’s long-term vision on data– Brings query provider Linq to Entities

• Parallel Linq (PLinq)– Passes parts of query to different cores in

multicore/multiproc machine• Community query providers for Linq:

– Linq to Amazon, LDAP, SharePoint, NHibernate, MySql, Flickr, … and more (to come)

• Linq 2.0

Page 27: Applied  Linq

Expanding on Linq

• Linq-enable your existing API’s– Specifically for in-memory queries– Create extension methods that return an

IEnumerable<T> object • Write your own query provider

– Implement IQueryable<T>– Parse expression trees and translate nodes to

different code or query language

Page 29: Applied  Linq

Blogs

• Microsoft Teams– C#– VB– ADO.NET

• Individuals on Linq– General: Oakleaf Systems, Wes Dyer, Jomo

Fisher– SQL: Mike Taulty– XML: Eric White

Page 30: Applied  Linq

Summary

• Linq is about query keywords and operators

• Linq will change way you write your code

• Linq to XML might be more important than you think

• Is VB a better query language than C#?

• Linq is extensible

Page 31: Applied  Linq

Questions?

?


Recommended