Download presentation
Presentation is loading. Please wait.
Published byDinah Palmer Modified over 9 years ago
1
LINQ: It’s Not Your Father’s Data Access Denny Boynton Anheuser-Busch Companies
2
Goals –Provide overview of the LINQ project –Demonstrate basic functionality of LINQ –Point out learning resources for self study
3
What is LINQ? “Language Integrated Query” Evolution of application data management Coming with C# 3.0 and VB.NET 9.0 Anders Hejlsberg Don Box
4
The Problem –Worlds of OO and data access are far, far apart –OO language types and native database types are often different –SQL code is “inside the quotes” No strong typing or compile-time type checking No Intellisense No Statement completion –SQL and XML have query languages, objects to not LINQ seeks to bridge the gap
5
What is LINQ? Standard Query Operators Objects DLinq (ADO.NET) XLinq(System.Xml) XML.NET Language Integrated Query C#VBOthers… SQLWinFS Source: Anders Hejlsberg’s PDC Presentation
6
Examine the basics of LINQ Demo
7
Language Enhancements Lambda Expressions Extension Methods Local Variable Type Inference Object Initializers Anonymous Types Query Expressions C => c.Name c.Customers.Where(…).Select(…) var n = 5; new Point {x=1, y=2} New {c.Name, c.Phone}from..where…select
8
Standard Query Operators RestrictionWhere ProjectionSelect, SelectMany OrderingOrderBy, ThenBy GroupingGroupBy QuantifiersAny, All PartitioningTake, Skip, TakeWhile, SkipWhile SetsDistinct, Union, Intersect, Except ElementsFirst, FirstOrDefault, ElementAt AggregationCount, Sum, Min, Max, Average ConversionToArray, ToList, ToDictionary CastingOfType Source: Anders Hejlsberg’s PDC Presentation
9
DLinq A means of managing relational data SqlConnection c = new SqlConnection(…); c.Open(); SqlCommand cmd = new SqlCommand( @"SELECT c.Name, c.Phone @"SELECT c.Name, c.Phone FROM Customers c FROM Customers c WHERE c.City = @p0"); WHERE c.City = @p0"); cmd.Parameters.AddWithValue("@p0", "London“); DataReader dr = c.Execute(cmd); while (dr.Read()) { string name = dr.GetString(0); string name = dr.GetString(0); string phone = dr.GetString(1); string phone = dr.GetString(1); DateTime date = dr.GetDateTime(2); DateTime date = dr.GetDateTime(2);}dr.Close(); Accessing data today: Queries in quotes Loosely bound arguments Loosely typed result sets No compile time checks
10
DLinq public class Customer { … } public class Northwind: DataContext { public Table Customers; public Table Customers; …} Northwind db = new Northwind(…); var contacts = from c in db.Customers from c in db.Customers where c.City == "London" where c.City == "London" select new { c.Name, c.Phone }; select new { c.Name, c.Phone }; Accessing data with DLinq Classes describe data Strongly typed connection Integrated query syntax Strongly typed results Tables are like collections
11
DLinq Language integrated data access –Maps tables and rows to classes and objects –Builds on ADO.NET and.NET Transactions Mapping –Encoded in attributes –Relationships map to properties Persistence –Automatic change tracking –Updates through SQL or stored procedures
12
XLinq XmlDocument doc = new XmlDocument(); XmlElement contacts = doc.CreateElement("contacts"); foreach (Customer c in customers) if (c.Country == "USA") { if (c.Country == "USA") { XmlElement e = doc.CreateElement("contact"); XmlElement e = doc.CreateElement("contact"); XmlElement name = doc.CreateElement("name"); XmlElement name = doc.CreateElement("name"); name.InnerText = c.CompanyName; name.InnerText = c.CompanyName; e.AppendChild(name); e.AppendChild(name); XmlElement phone = doc.CreateElement("phone"); XmlElement phone = doc.CreateElement("phone"); phone.InnerText = c.Phone; phone.InnerText = c.Phone; e.AppendChild(phone); e.AppendChild(phone); contacts.AppendChild(e); contacts.AppendChild(e); }doc.AppendChild(contacts); Programming XML today <contacts> Great Lakes Food Great Lakes Food (503) 555- 7123 (503) 555- 7123 …</contacts> Imperative model Document centric No integrated queries Memory intensive
13
XLinq XElement contacts = new XElement("contacts", from c in customers from c in customers where c.Country == "USA" where c.Country == "USA" select new XElement("contact", select new XElement("contact", new XElement("name", c.CompanyName), new XElement("name", c.CompanyName), new XElement("phone", c.Phone) new XElement("phone", c.Phone) )); Programming XML with XLinq Declarative model Element centric Integrated queries Smaller and faster
14
XLinq Language integrated query for XML –Expressive power of XPath / XQuery –But with C# or VB as programming language Leverages experience with DOM –Element centric, not document centric –Functional construction –Text nodes are just strings –Simplified XML namespace support –Faster and smaller
15
Show DLinq and XLinq in action Demo
16
What is LINQ? The LINQ project is: –Language Integrated Query for.NET Native query syntax for.NET languages –Standard Query Operators SQL-like method extensions for any.NET collection System.Query namespace –DLinq Code name for future version of ADO.NET Query enabled data access framework System.Data.Xlinq namespace –XLinq Query enabled, smaller, faster XML DOM System.XML.Xlinq namespace
17
Benefits of LINQ Unified querying of objects, relational, XML Type checking and IntelliSense for queries SQL and XQuery-like power in C# and VB Extensibility model for languages / APIs
18
Closing Thoughts Not sure where use of LINQ will coincide with SQL Use may well be driven by data management standards of an organization –Where should data access really “live” ORM synchronization This could really be a revolution
19
Resources LINQ Project Home Page –http://msdn.microsoft.com/data/ref/linq/http://msdn.microsoft.com/data/ref/linq/ Anders Hejlsberg – LINQ –http://channel9.msdn.com/showpost.aspx?postid=1146 80http://channel9.msdn.com/showpost.aspx?postid=1146 80 LINQ Project Overview Whitepaper –http://msdn.microsoft.com/data/ref/linq/default.aspx?p ull=/library/en-us/dndotnet/html/linqprojectovw.asp
20
Thank You Denny Boynton Email: denny@boyntons.com
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.