Introducing LINQ

Page 1

Introducing LINQ

Learn More @ http://www.learnnowonline.com Copyright Š by Application Developers Training Company


Objectives • Motivate the need for LINQ • Learn about the various LINQ providers • Investigate simple LINQ to Objects, LINQ to SQL, and LINQ to XML samples

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Agenda • Language Integrated Query • Structure of a LINQ Query • Some LINQ Examples

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Language Integrated Query • Querying and manipulating data has always been a fundamental part of our jobs as developers • Data formats change, but core needs are the same  Must create, retrieve, update, and delete data

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Data Access

(DBASE, 1985 or so) USE empl REPLACE ALL salary WITH (salary * 1.1) FOR supervises > 0 LIST ALL fname, lname, salary FOR Supervises > 0

Learn More @ http://www.learnnowonline.com Copyright Š by Application Developers Training Company


Data Access APIs (C#) (late 1990s/early 2000s)

SqlCommand cmd = new SqlCommand( @"SELECT fname, lname, salary FROM Empl WHERE supervises > @p0" ); cmd.Parameters.AddWithValue("@po", 0); SqlConnection c = new SqlConnection(…); c.Open(); DataReader people = c.Execute(cmd); while (people.Read()) { string fname = (string) people["fname"]; string lname = (string) people["lname"]; double salary = (double) people["salary"]; } people.Close(); Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Object/Relational Mapping (C#) (last few years)

public class Employee { public string FirstName; public string LastName; public double Salary; } IList employees = session.CreateCriteria(typeof(Employee)) .Add(Expression.Gt("supervises", 0) .List(); foreach(Employee employee in employees) { string fname = employee.FirstName; string lname = employee.LastName; double salary = employee.Salary; } Learn More @ http://www.learnnowonline.com Copyright Š by Application Developers Training Company


Data Access APIs (VB) (late 1990s/early 2000s)

Dim cmd As New SqlCommand( _ "SELECT fname, lname, salary" & _ " FROM Empl" & _ " WHERE supervises > @p0") cmd.Parameters.AddWithValue("@p0", 0) Dim cnn as New SqlConnection(…) cnn.Open() Dim people As DataReader = cnn.Execute(cmd) While people.Read() Dim fname As String = people("fname").ToString() Dim lname As String = people("lname").ToString() Dim salary As Double = CDbl(people("salary")) End While people.Close(); Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Object/Relational Mapping (VB) (last few years)

Public Class Employee Public FirstName As String Public LastName As String Public Salary As Double End Class Dim employees As IList = _ session.CreateCriteria(GetType(Employee). _ Add(Expression.Gt("supervises", 0).List() For Each employee As Employee In Employees Dim fname As String = people("fname").ToString() Dim lname As String = people("lname").ToString() Dim salary As Double = CDbl(people("salary")) Next employee Learn More @ http://www.learnnowonline.com Copyright Š by Application Developers Training Company


Object/Relational Mapping • Provides:  Mapping between relational data to/from objects  Cleaner integration of business rules and validation

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


LINQ to the Rescue • How do you retrieve non-relational data?  XML, RSS, Web Services, REST, AD, Files, and so on

• How do you interact with plain old objects?  How do you interact and query custom domain models?

• How do you enable clean code in both a strongly typed and dynamic language world?

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


LINQ • Query, Set, and Transform Operations for .NET • Makes querying data a core programming concept • Works with all types and shapes of data  Relational databases  XML  Plain old objects

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


LINQ • Works with all .NET languages  VB and C# have integrated language support

• Works in any kind of project including Windows and Web projects • Also can find third party LINQ providers  Amazon.com for example

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


LINQ Providers • C# uses LINQ providers to map your LINQ queries to the data source that you’re querying • The LINQ provider takes the query that you create in code, and converts it into commands that the data source will be able to execute • On return from executing the commands, the provider also converts the data into objects that create your query results

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


LINQ Overview VB

Others…

C# .NET Language-Integrated Query LINQ enabled data sources

LINQ enabled ADO.NET LINQ To Objects

LINQ To Datasets

LINQ To SQL

LINQ To Entities

LINQ To XML

<book> <title/> <author/> <price/> </book>

Objects

Relationa l Copyright © by Application Developers Training Company

Learn More @ http://www.learnnowonline.com

XM L


LINQ Providers • LINQ to Objects  Allows you to query in-memory of sets of objects o o

Collections, arrays, and lists If a class implements IEnumerable (or generic version), you can use LINQ to query

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


LINQ Providers • LINQ to SQL  Allows you to query and modify data in SQL Server  You provide mapping between a modeling class and schema in data source  Use System.Data.Linq.DataContext class to provide the “plumbing”  Can use Visual Studio’s O/R designer to make it easy o

For now, will mark up entity class manually

 DataContext manages communication o

Stores state for optimistic concurrency checks

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


LINQ Providers • LINQ to XML  Easy to query, modify, and generate XML content  Can work with XML from file, or from stream  System.Linq.Xml.XObject, Xnode, XElement, XAttribute o

Make it easy to work with XML programmatically

 LINQ to XML provider works with these classes to create queryable collections of XML data  Visual Basic adds language-specific rich support for LINQ to XML

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


LINQ Providers • LINQ to DataSet  Allows you to query and update data in ADO.NET dataset  Can use querying engine against data already cached in client application  Strongly typed datasets easier to work with than standard datasets o

You already know the schema—it's just LINQ to Objects

 Language features make it possible to query standard datasets

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


LINQ Providers • LINQ to Entities  Allows developers to query data exposed using Entity Data Model (EDM) o

EDM: conceptual model, allows applications to interact with data as if it was a collection of objects, or entities

 Using EDM, ADO.NET exposes entities as objects in .NET Framework, allows LINQ queries to operate  Conceptually, same as LINQ to SQL, but works with any data source o

Doesn't assume one-to-one mapping between classes and schema

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Agenda • Language Integrated Query • Structure of a LINQ Query • Some LINQ Examples

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Structure of a LINQ Query • LINQ query contains clauses that specify data sources and iteration variables • Query expressions can also include:     

Filtering Sorting Grouping Joining Calculating

• From required—indicates source of data Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


The Three Stages of a LINQ Query • Each LINQ query requires three stages:  Obtain the data source(s)  Create the query  Execute the query

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


The Data Source • In the sample, data source is an array of integers • Because array implements IEnumerable, can query against it  Treated as a "queryable" type

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


XML as Data Source (VB) • Could use LINQ to XML to load contents of an XML file into a queryable collection of XElement instances: ' VB Dim items As XElement = XElement.Load("C:\Grocery.xml")

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


XML as Data Source (C#) • Could use LINQ to XML to load contents of an XML file into a queryable collection of XElement instances: // C#: XElement items = XElement.Load(@"C:\Grocery.xml");

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


SQL as Data Source (VB) • Can use LINQ to SQL once you have a class that provides object-relational mapping: ' VB Dim dc As New DataContext( _ My.Settings.NorthwindConnectionString) Dim customers As Table(Of Customer) = _ dc.GetTable(Of Customer)

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


SQL as Data Source (C#) • Can use LINQ to SQL once you have a class that provides object-relational mapping: // C# DataContext dc = new DataContext( Properties.Settings.Default.NorthwindConnectionString); Table<Customer> customers = dc.GetTable<Customer>();

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


The Query • Given the data source, can specify the query  Defines the information you want to retrieve  Optionally, can specify how to sort, filter, and group

• LINQ queries are generally the same, no matter the data source

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


The Query Execution • Query definition doesn't execute the query • Instead, defines the query that will run when it's time to retrieve the data • To execute, need to run code that forces query reference to require the values  In this course, For Each loop generally forces

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Returning Multiple Values • Want to return multiple values? • In general, two options:  Create class that exposes properties o

Specify new instance of class in Select

 Specify values in Select clause o

Compiler creates a new anonymous type containing just the properties you specify

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Creating a Class for Return Values • See MyFileInfo class and MultipleReturnValues1

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Using an Anonymous Type • In previous example, code created a simple type (MyFileInfo)  Type contained properties returned by query  Why create a class simply to return values?

• Anonymous types generally simpler • Compiler creates the type, based on values specified in query Select clause  You don't know the type's name  Implicit type definition makes it possible to work with the anonymous type Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Deferred Execution • Defining query doesn't cause query to execute • Must actually force execution by requesting data • In other words:  Creating query doesn't return data  Provides potential for returning data

• Can take advantage of deferred execution  Break query into small steps without fear of multiple trips to the server for data  Makes debugging simpler, as well Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Converting Results to Force Execution • Sometimes, might want to immediately execute query and cache its results • Can use method like ToList or ToArray • Each executes query, and returns results

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Agenda • Language Integrated Query • Structure of a LINQ Query • Some LINQ Examples

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Some LINQ Examples • Get a taste of the kinds of things you can do with LINQ • Introduce some of the new language features for LINQ • Examples of:  LINQ to Objects  LINQ to SQL  LINQ to XML

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


LINQ to Objects • Can use any collection that implements IEnumerable (or generic version) as data source • Note example uses multiple overloaded versions of DisplayResults procedure

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Query Syntax/Extension Methods (C#) • How does language compiler turn keywords like select, where, and orderby into executable code?  Keywords need to be converted into methods

• Each LINQ keyword corresponds to a single method of the System.Linq.Enumerable

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Query Syntax/Extension Methods (VB) • How does language compiler turn keywords like Select, Where, and Order By into executable code?  Keywords need to be converted into methods

• Each LINQ keyword corresponds to a single method of the System.Linq.Enumerable

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Continuing the Investigation • So compiler converts keywords into methods • But IEnumerable is an old interface  It doesn't support Where, Select, and so on  Where do those methods come from?

• LINQ requires ability to extend existing interfaces/classes without changing their definitions  Available because of new extension methods

• Extension method exists in one class  Allows code to extend a different class Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Extension Methods (VB) • Add new methods to existing classes • Not just for LINQ, but crucial for LINQ • Extension methods must:  Accept a parameter, the type of which defines the class that you’re extending  Exist within a module  Include the <Extension()> attribute

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Extension Methods (C#) • Add new methods to existing classes • Not just for LINQ, but crucial for LINQ • Extension methods must:  Accept a parameter, the type of which defines the class that you’re extending  Exist within a static class  Be a static method  Include the this keyword in the parameter

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Using LINQ to Group Output • System.Linq.Enumerable class provides large number of methods • Look for grouping methods

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


LINQ to SQL • Allows standard LINQ queries to work with data stored in relational databases  Extends ADO.NET  Adds support for mapping tables and rows to classes and properties

• To support LINQ to SQL, must add custom .NET attributes to class that represents the schema • Map a class to a table  Map properties within the class to columns  All by adding attributes

• Can represent relationships as well Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Linking a Class to SQL Server • Retrieve data from Northwind Customers table • Retrieve CustomerID, CompanyName, ContactName, Country, Region • Indicate primary key, columns, and rename column

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Creating the Class • Start by creating a class with properties that correspond to columns in the database • See Customer1 class

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Marking Up the Class • Use attributes from the System.Data.Linq.Mapping namespace  Table  Column  Many others

• See Customer class

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Retrieving a Collection of Customers • Need some mechanism to manage connection between class and data  Can't simply fill some huge data structure with all the data  Need some class that converts requests for data into SQL strings, and executes/virtualizes

• System.Data.Linq.DataContext class  Includes members that provide access to data  Tracks changes to data for updates  O/R designer creates classes, and new class that inherits from DataContext Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Determining the Actual SQL String • Set Log property of DataContext to stream  Sends all information to the output stream

• To simply see the SQL string  Call ToString method of query variable

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Working with Anonymous Types • Anonymous types work well with LINQ to SQL • Often need to retrieve just a subset of columns  Or perform a calculation

• See DemoLinqToSqlWithAnonymousTypes

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


LINQ to XML • Need to retrieve, create, query XML? • .NET Framework provides rich support  Steps can be complex  Can require XSLT and XPath

• What if you could accomplish these using a standard syntax? • That is, what about LINQ? • LINQ to XML makes it possible • Examples create XML content  Examine Course class, and CreateCourseList Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Life without LINQ to XML • Without LINQ to XML, creating XML content required multiple steps  XmlDocument creates new elements  Set properties  Append as child of new parent

• See DemoNoLinqToXml

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Using System.Xml.Linq Classes • System.Xml.Linq namespace adds classes  XElement, XAttribute, XComment  All inherit from XObject

• Each provides overloaded constructors  You pass as much information as necessary to generate the XML  More readable than XmlDocument code

• Examine CreateXmlContent

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Creating Data: From and Select • From clause sets up range variable iterating over data source • Select clause specifies "shape" of resulting data • Take advantage of these facts to use LINQ to generate XML content • Examine DemoLinqToXml

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Visual Basic Only (VB) • Only Visual Basic adds new features that make it far easier to work with LINQ to XML  XML literals  XML replacement tokens

• See CreateXmlContentVBOnly

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Learn More! • This is an excerpt from a larger course. Visit www.learnnowonline.com for the full details!

Learn More @ http://www.learnnowonline.com Copyright Š by Application Developers Training Company


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.