240 likes | 438 Views
C# 3.0 and LINQ. Pavel Yosifovich CTO, Hi-Tech College pavely@hi-tech.co.il http://blogs.microsoft.co.il/blogs/pavely. Agenda. C# 3.0 New Features Introduction to LINQ LINQ to Objects LINQ to SQL LINQ to XML Summary. C# 3.0 Features. Implicitly Typed Local Variables
E N D
C# 3.0 and LINQ Pavel Yosifovich CTO, Hi-Tech College pavely@hi-tech.co.il http://blogs.microsoft.co.il/blogs/pavely
Agenda • C# 3.0 New Features • Introduction to LINQ • LINQ to Objects • LINQ to SQL • LINQ to XML • Summary ©2008 Pavel Yosifovich
C# 3.0 Features • Implicitly Typed Local Variables • Automatic Properties • Object and Collection Initializers • Anonymous Types • Extension Methods • Lambda Expressions • LINQ ©2008 Pavel Yosifovich
Implicitly Typed Local Variables • The var keyword // C# 2.0 int x = 5; string name = "Bart Simpson"; Dictionary<string, object> data = new Dictionary<string, object>(); int size = name.Length; // C# 3.0 var x = 5; var name = "Bart Simpson"; var data = new Dictionary<string, object>(); var size = name.Length; var y = x; var keys = data.Keys; // Dictionary<string, object>.KeyCollection ©2008 Pavel Yosifovich
Automatic Properties public class Person { // C# 2.0 private string _firstName, _lastName; private int _age; public string FirstName { get { return _firstName; } set { _firstName = value; } } public string LastName { get { return _lastName; } set { _lastName = value; } } public int Age { get { return _age; } set { _age = value; } } } public class Person { // C# 3.0 public string FirstName { get; set; } public string LastName { get; set; } public int Age { get; set; } } ©2008 Pavel Yosifovich
Object Initializers // C# 2.0 Person p = new Person(); p.FirstName = "Bart"; p.LastName = "Simpson"; p.Age = 12; // C# 3.0 Person p = new Person() { FirstName = "Bart", LastName = "Simpson", Age = 12 }; ©2008 Pavel Yosifovich
Collection Initializers // C# 3.0 List<Person> people = new List<Person>(); people.Add(new Person() { FirstName = "Bart", LastName = "Simpson", Age = 12 }); people.Add(new Person() { FirstName = "Clark", LastName = "Kent", Age = 35 }); people.Add(new Person() { FirstName = "Peter", LastName = "Parker", Age = 30 }); // C# 3.0 var people = new List<Person>() { new Person() { FirstName = "Bart", LastName = "Simpson", Age = 12 }, new Person() { FirstName = "Clark", LastName = "Kent", Age = 35 }, new Person() { FirstName = "Peter", LastName = "Parker", Age = 30 } }; ©2008 Pavel Yosifovich
Anonymous Types var people = new[] { new { FirstName = "Clark", LastName = "Kent", Age = 36 }, new { FirstName = "Peter", LastName = "parker", Age = 26 }, new { FirstName = "Bart", LastName = "Simpson", Age = 11 } }; foreach (vari in people) Console.WriteLine("{0} {1} ({2})", i.FirstName, i.LastName, i.Age); Console.WriteLine(people[0].GetType().FullName); // ??? ©2008 Pavel Yosifovich
Extension Methods public static class MyExtensions { public static string UpperLower(this string str, boolupperFirst) { StringBuildernewString = new StringBuilder(str.Length); for (inti = 0; i < str.Length; i++) { newString.Append(upperFirst ? char.ToUpper(str[i]) : char.ToLower(str[i])); upperFirst = !upperFirst; } return newString.ToString(); } } string input = Console.ReadLine(); Console.WriteLine("calling extension method for {0}: {1}", input, input.UpperLower(true)); ©2008 Pavel Yosifovich
DEMO Extension Methods
Problem Data as Objects Objects as Data Projection, Join, Grouping, Queries (Declarative) Strongly typed, Intellisense, Compilers, Debuggers (Imperative) ©2008 Pavel Yosifovich
What is LINQ? • Unified programming model for any data type/source • Collections • Database Relational Data • XML Files • Extendable for anything else • Introduce more declarative syntax • Data is equivalent to Objects ©2008 Pavel Yosifovich
LINQ Architecture C# 3.0 VB 9.0 Others… .NET Language-Integrated Query (LINQ) LINQ Enabled Data Sources LINQ enabled ADO.NET LINQ To Objects LINQ to Entities LINQ To SQL LINQ To Dataset LINQ to XML XML Objects Relational Data ©2008 Pavel Yosifovich
LINQ Syntax Fundamentals • Syntax based on Extension methods • Some Extension methods may be replaced by language keywords • where, orderby, select, group, … • Auxiliary language features in use • Automatic properties • Anonymous types • Implicitly typed local variables • Object initializers ©2008 Pavel Yosifovich
LINQ To Objects • Working with collections • Any one that implements IEnumerable<T> • using System.Linq • System.Core.Dll assembly • Deferred Execution
DEMO LINQ to objects
Classic ADO.NET Application SqlConnectionconn = new SqlConnection(“...“); SqlCommandcmd = conn.CreateCommand(); cmd.CommandText = @“ SELECT * FROM Vehicles WHERE Model = @Model"; cmd.Parameters.Add("@Model", “Mazda 3“); SqlDataReader r = cmd.ExecuteReader(); while ( r.HasRows ) { Console.WriteLine(r[“Number"] + r[“Year"]); } No intellisence No compile time checks Loosely bound arguments Untyped Results Relational Database
LINQ To SQL • The DataContext type • Custom attributes (Table, Column) • Not just “Query” • Can use stored procedures • using System.Data.Linq • System.Data.Linq.Dll Assembly
DEMO LINQ to SQL
LINQ To SQL Performance • Performance is good • 97% of classic ADO.NET • Optimizations • Turn track checking off for reading only • ObjectTrackingEnabled= false • Use the DataLoadOptions type to minimize round trips • LoadWith<>, AssociateWith<>instance methods • Compile frequently used queries • CompiledQuery.Compile(…)
LINQ To XML • New object model • No need to create a document • Very intuitive and flexible • using System.Xml.Linq • System.Xml.Linq.Dll Assembly • Easy to combine with other LINQ providers • E.g. LINQ to SQL
DEMO LINQ to XML
Q & A ? ©2008 Pavel Yosifovich
Summary • LINQ Allows using data as objects and vice versa • Same syntax across any provider • C# Language support • Use it today!