200 likes | 359 Views
LINQ: It’s Not Your Father’s Data Access. Denny Boynton Anheuser-Busch Companies. Goals. Provide overview of the LINQ project Demonstrate basic functionality of LINQ Point out learning resources for self study. What is LINQ?. “Language Integrated Query”
E N D
LINQ: It’s Not Your Father’s Data Access Denny Boynton Anheuser-Busch Companies
Goals • Provide overview of the LINQ project • Demonstrate basic functionality of LINQ • Point out learning resources for self study
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
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
<book> <title/> <author/> <year/> <price/> </book> SQL WinFS Objects XML What is LINQ? C# VB Others… .NET Language Integrated Query StandardQueryOperators DLinq(ADO.NET) XLinq (System.Xml) Source: Anders Hejlsberg’s PDC Presentation
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 {c.Name, c.Phone} from..where…select new Point {x=1, y=2}
Standard Query Operators Source: Anders Hejlsberg’s PDC Presentation
DLinq A means of managing relational data Queries in quotes Accessing data today: SqlConnection c = new SqlConnection(…); c.Open(); SqlCommand cmd = new SqlCommand( @"SELECT c.Name, c.Phone FROM Customers c WHERE c.City = @p0"); cmd.Parameters.AddWithValue("@p0", "London“); DataReader dr = c.Execute(cmd); while (dr.Read()) { string name = dr.GetString(0); string phone = dr.GetString(1); DateTime date = dr.GetDateTime(2); } dr.Close(); Loosely bound arguments Loosely typed result sets No compile time checks
DLinq Accessing data with DLinq Classes describe data public class Customer { … } public class Northwind: DataContext { public Table<Customer> Customers; … } Tables are like collections Strongly typed connection Northwind db = new Northwind(…); var contacts = from c in db.Customers where c.City == "London" select new { c.Name, c.Phone }; Integrated query syntax Strongly typed results
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
XLinq Programming XML today Imperative model XmlDocument doc = new XmlDocument(); XmlElement contacts = doc.CreateElement("contacts"); foreach (Customer c in customers) if (c.Country == "USA") { XmlElement e = doc.CreateElement("contact"); XmlElement name = doc.CreateElement("name"); name.InnerText = c.CompanyName; e.AppendChild(name); XmlElement phone = doc.CreateElement("phone"); phone.InnerText = c.Phone; e.AppendChild(phone); contacts.AppendChild(e); } doc.AppendChild(contacts); Document centric No integrated queries Memory intensive <contacts> <contact> <name>Great Lakes Food</name> <phone>(503) 555-7123</phone> </contact> … </contacts>
XLinq Programming XML with XLinq Declarative model XElement contacts = new XElement("contacts", from c in customers where c.Country == "USA" select new XElement("contact", new XElement("name", c.CompanyName), new XElement("phone", c.Phone) ) ); Elementcentric Integrated queries Smaller and faster
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
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
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
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
Resources LINQ Project Home Page • http://msdn.microsoft.com/data/ref/linq/ Anders Hejlsberg – LINQ • http://channel9.msdn.com/showpost.aspx?postid=114680 LINQ Project Overview Whitepaper • http://msdn.microsoft.com/data/ref/linq/default.aspx?pull=/library/en-us/dndotnet/html/linqprojectovw.asp
Thank You Denny Boynton Email: denny@boyntons.com