Guernsey hotel forest park bar meals cocktail lounge bar saty in guernsey menu
Damien Guard (BSc, MBCS) [email protected] Guernsey Software Developer Forum Language...
-
Upload
daniel-waters -
Category
Documents
-
view
218 -
download
0
Transcript of Damien Guard (BSc, MBCS) [email protected] Guernsey Software Developer Forum Language...
![Page 1: Damien Guard (BSc, MBCS) damien@envytech.co.uk Guernsey Software Developer Forum Language Integrated Query:](https://reader036.fdocuments.in/reader036/viewer/2022062407/56649d305503460f94a0918b/html5/thumbnails/1.jpg)
Damien Guard (BSc, MBCS)http://[email protected]
Guernsey Software Developer Forumhttp://developers.org.gg
Language Integrated Query: An introduction
![Page 2: Damien Guard (BSc, MBCS) damien@envytech.co.uk Guernsey Software Developer Forum Language Integrated Query:](https://reader036.fdocuments.in/reader036/viewer/2022062407/56649d305503460f94a0918b/html5/thumbnails/2.jpg)
What is LINQ?
• Language Integrated Query
• Make query a part of the language
• Component of .NET Framework 3.5
• Now shipping with Visual Studio 2008
![Page 3: Damien Guard (BSc, MBCS) damien@envytech.co.uk Guernsey Software Developer Forum Language Integrated Query:](https://reader036.fdocuments.in/reader036/viewer/2022062407/56649d305503460f94a0918b/html5/thumbnails/3.jpg)
Query without LINQ
• Objects using loops and conditionsforeach(Customer c in customers) if (c.Region == "UK") ...
• Databases using SQLSELECT * FROM Customers WHERE Region='UK'
• XML using XPath/XQuery//Customers/Customer[@Region='UK']
![Page 4: Damien Guard (BSc, MBCS) damien@envytech.co.uk Guernsey Software Developer Forum Language Integrated Query:](https://reader036.fdocuments.in/reader036/viewer/2022062407/56649d305503460f94a0918b/html5/thumbnails/4.jpg)
ADO without LINQSqlConnection con = new SqlConnection(...);con.Open(); SqlCommand cmd = new SqlCommand( @"SELECT * FROM Customers WHERE c.Region = @Region", con
);cmd.Parameters.AddWithValue("@Region", "UK"); DataReader dr = cmd.ExecuteReader(); while (dr.Read()) { string name = dr.GetString(dr.GetOrdinal("Name")); string phone = dr.GetString(dr.GetOrdinal("Phone")); DateTime date = dr.GetDateTime(3);}dr.Close();con.Close();
![Page 5: Damien Guard (BSc, MBCS) damien@envytech.co.uk Guernsey Software Developer Forum Language Integrated Query:](https://reader036.fdocuments.in/reader036/viewer/2022062407/56649d305503460f94a0918b/html5/thumbnails/5.jpg)
Query with LINQC#var myCustomers = from c in customers where c.Region == "UK" select c;
VB.NETDim myCustomers = From c In customers _ Where c.Region = "UK" _ Select c
![Page 6: Damien Guard (BSc, MBCS) damien@envytech.co.uk Guernsey Software Developer Forum Language Integrated Query:](https://reader036.fdocuments.in/reader036/viewer/2022062407/56649d305503460f94a0918b/html5/thumbnails/6.jpg)
More LINQ queriesC#var goodCusts = (from c in db.Customers where c.PostCode.StartsWith("GY") orderby c.Sales descending select c).Skip(10).Take(10);
VB.NETDim goodCusts = (From c In db.Customers _ Where c.PostCode.StartsWith("GY") _ Order By c.Sales Descending _ Select c).Skip(1).Take(10)
![Page 7: Damien Guard (BSc, MBCS) damien@envytech.co.uk Guernsey Software Developer Forum Language Integrated Query:](https://reader036.fdocuments.in/reader036/viewer/2022062407/56649d305503460f94a0918b/html5/thumbnails/7.jpg)
Advantages• Unified data access
Single syntax to learn and remember
• Strongly typedCatch errors during compilation
• IntelliSensePrompt for syntax and attributes
• Bindable result sets
![Page 8: Damien Guard (BSc, MBCS) damien@envytech.co.uk Guernsey Software Developer Forum Language Integrated Query:](https://reader036.fdocuments.in/reader036/viewer/2022062407/56649d305503460f94a0918b/html5/thumbnails/8.jpg)
ArchitectureOthersOthersC#C# VB.NETVB.NET
.NET Language Integrated Query (LINQ).NET Language Integrated Query (LINQ)
LINQLINQto SQLto SQL
LINQLINQto Objectsto Objects
LINQLINQto XMLto XML
LINQLINQto Datasetsto Datasets
LINQLINQto Entitiesto Entities
LINQ data source providersLINQ data source providers
ADO.NET support for LINQADO.NET support for LINQ
![Page 9: Damien Guard (BSc, MBCS) damien@envytech.co.uk Guernsey Software Developer Forum Language Integrated Query:](https://reader036.fdocuments.in/reader036/viewer/2022062407/56649d305503460f94a0918b/html5/thumbnails/9.jpg)
LINQ to ObjectsC#int[] nums = new int[] {0,4,2,6,3,8,3,1};double average = nums.Take(6).Average();var above = from n in nums where n > average select n;
VB.NETDim nums() As Integer = {0,4,2,6,3,8,3,1}Double average = nums.Take(6).Average()Dim above = From n In nums _ Where n > average _ Select n
![Page 10: Damien Guard (BSc, MBCS) damien@envytech.co.uk Guernsey Software Developer Forum Language Integrated Query:](https://reader036.fdocuments.in/reader036/viewer/2022062407/56649d305503460f94a0918b/html5/thumbnails/10.jpg)
LINQ to Objects
• Query any IEnumerable<T> sourceIncludes arrays, List<T>, Dictionary...
• Many useful operators availableSum, Max, Min, Distinct, Intersect, Union
• Expose your own data with IEnumerable<T> or IQueryable<T>
• Create operators using extension methods
![Page 11: Damien Guard (BSc, MBCS) damien@envytech.co.uk Guernsey Software Developer Forum Language Integrated Query:](https://reader036.fdocuments.in/reader036/viewer/2022062407/56649d305503460f94a0918b/html5/thumbnails/11.jpg)
LINQ operatorsAggregate Conversion Ordering Partitioning Sets
AggregateAverageCountMaxMinSum
CastOfTypeToArrayToDictionaryToListToLookupToSequence
OrderByThenByDescendingReverse
SkipSkipWhileTakeTakeWhile
ConcatDistinctExceptIntersectUnion
and many others
![Page 12: Damien Guard (BSc, MBCS) damien@envytech.co.uk Guernsey Software Developer Forum Language Integrated Query:](https://reader036.fdocuments.in/reader036/viewer/2022062407/56649d305503460f94a0918b/html5/thumbnails/12.jpg)
LINQ to SQL• Object-relational mapping
Records become strongly-typed objects
• Data context is the controller mechanism
• Facilitates update, delete & insert
• Translates LINQ queries behind the scenes
• Type, parameter and injection safe
![Page 13: Damien Guard (BSc, MBCS) damien@envytech.co.uk Guernsey Software Developer Forum Language Integrated Query:](https://reader036.fdocuments.in/reader036/viewer/2022062407/56649d305503460f94a0918b/html5/thumbnails/13.jpg)
Database mapping• VS 2008 designer or SQLMetal command
• Map tables & fields to classes & properties
• Generates partial classes with attributes
• Each record becomes an object
• Data context represents the database
• Utilise tables, views or stored procedures
![Page 14: Damien Guard (BSc, MBCS) damien@envytech.co.uk Guernsey Software Developer Forum Language Integrated Query:](https://reader036.fdocuments.in/reader036/viewer/2022062407/56649d305503460f94a0918b/html5/thumbnails/14.jpg)
Modifying objects• Update
Set object properties• Delete
context.Table.DeleteOnSubmit(object)
• Insertcontext.Table.InsertOnSubmit(object)
• Commit changes backcontext.SubmitChanges()Transactional - all or nothing
![Page 15: Damien Guard (BSc, MBCS) damien@envytech.co.uk Guernsey Software Developer Forum Language Integrated Query:](https://reader036.fdocuments.in/reader036/viewer/2022062407/56649d305503460f94a0918b/html5/thumbnails/15.jpg)
Demo of LINQ to SQL
![Page 16: Damien Guard (BSc, MBCS) damien@envytech.co.uk Guernsey Software Developer Forum Language Integrated Query:](https://reader036.fdocuments.in/reader036/viewer/2022062407/56649d305503460f94a0918b/html5/thumbnails/16.jpg)
Additional providers
• Relational dataNHibernate, MySQL, Oracle, PostgreSQL
• Web servicesRDF, Flickr, Amazon, WebQueries
• CustomLDAP, Google Desktop, SharePoint, TerraServer maps
![Page 17: Damien Guard (BSc, MBCS) damien@envytech.co.uk Guernsey Software Developer Forum Language Integrated Query:](https://reader036.fdocuments.in/reader036/viewer/2022062407/56649d305503460f94a0918b/html5/thumbnails/17.jpg)
Future developments
• BlinqScaffold web UI for list/view/update pages
• PLINQParallel query processing over many CPUs
• SyncLINQ & Continuous LINQUpdated results via INotifyCollectionChanged
![Page 18: Damien Guard (BSc, MBCS) damien@envytech.co.uk Guernsey Software Developer Forum Language Integrated Query:](https://reader036.fdocuments.in/reader036/viewer/2022062407/56649d305503460f94a0918b/html5/thumbnails/18.jpg)
Limitations
LINQ•Only defines query, not update or context
LINQ To SQL•Mapping is set at compile time•Can not mix mapped and unmapped properties in a single query•Microsoft SQL Server 2000, 2005 only
![Page 19: Damien Guard (BSc, MBCS) damien@envytech.co.uk Guernsey Software Developer Forum Language Integrated Query:](https://reader036.fdocuments.in/reader036/viewer/2022062407/56649d305503460f94a0918b/html5/thumbnails/19.jpg)
.NET features used
.NET Framework 2.0
• Partial classes (mapping)
.NET Framework 3.5
• Anonymous types (shaping)• Extension methods (query operators)• Type inference (var keyword)• Lambda expressions (query syntax)
![Page 20: Damien Guard (BSc, MBCS) damien@envytech.co.uk Guernsey Software Developer Forum Language Integrated Query:](https://reader036.fdocuments.in/reader036/viewer/2022062407/56649d305503460f94a0918b/html5/thumbnails/20.jpg)
Alternatives for .NET
• NHibernate
• Castle MonoRail / ActiveRecord
• SubSonic
• Code generation tool + templatesCodeSmith, MyGeneration, LLBLGen/Pro +NetTiers, DooDads, roll your own...
![Page 21: Damien Guard (BSc, MBCS) damien@envytech.co.uk Guernsey Software Developer Forum Language Integrated Query:](https://reader036.fdocuments.in/reader036/viewer/2022062407/56649d305503460f94a0918b/html5/thumbnails/21.jpg)
More information
• Official site - msdn.microsoft.com/linq/
• Tutorials - weblogs.asp.net/scottgu/
• Screencasts - tinyurl.com/yuscft
• This presentation & cheat sheetdamieng.com/blog/tag/linq
![Page 22: Damien Guard (BSc, MBCS) damien@envytech.co.uk Guernsey Software Developer Forum Language Integrated Query:](https://reader036.fdocuments.in/reader036/viewer/2022062407/56649d305503460f94a0918b/html5/thumbnails/22.jpg)
Questions & answers