applied linq

Post on 17-Jan-2016

83 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

Applied Linq. Putting Linq to work. Introducing…. Class-A Kennisprovider Microsoft development Training Coaching http://www.class-a.nl Alex Thissen Trainer/coach http://blog.alexthissen.nl. Agenda. About Linq and queries Query providers and APIs What it means to apply Linq - PowerPoint PPT Presentation

TRANSCRIPT

Applied Linq

Putting Linq to work

Introducing…

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

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

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

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;

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

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

Demos

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

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

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

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

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

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

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

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

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>

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>

Demo

Visual Basic – WCF sample revisited– Deep XML support

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

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

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

Linq and architecture

System.Data.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

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

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

*

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

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

Blogs

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

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

Fisher– SQL: Mike Taulty– XML: Eric White

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

Questions?

?

top related