1 / 24

C# 3.0 and LINQ

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

langston
Download Presentation

C# 3.0 and LINQ

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C# 3.0 and LINQ Pavel Yosifovich CTO, Hi-Tech College pavely@hi-tech.co.il http://blogs.microsoft.co.il/blogs/pavely

  2. Agenda • C# 3.0 New Features • Introduction to LINQ • LINQ to Objects • LINQ to SQL • LINQ to XML • Summary ©2008 Pavel Yosifovich

  3. C# 3.0 Features • Implicitly Typed Local Variables • Automatic Properties • Object and Collection Initializers • Anonymous Types • Extension Methods • Lambda Expressions • LINQ ©2008 Pavel Yosifovich

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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

  9. 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

  10. DEMO Extension Methods

  11. Problem Data as Objects Objects as Data Projection, Join, Grouping, Queries (Declarative) Strongly typed, Intellisense, Compilers, Debuggers (Imperative) ©2008 Pavel Yosifovich

  12. 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

  13. 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

  14. 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

  15. LINQ To Objects • Working with collections • Any one that implements IEnumerable<T> • using System.Linq • System.Core.Dll assembly • Deferred Execution

  16. DEMO LINQ to objects

  17. 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

  18. 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

  19. DEMO LINQ to SQL

  20. 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(…)

  21. 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

  22. DEMO LINQ to XML

  23. Q & A ? ©2008 Pavel Yosifovich

  24. Summary • LINQ Allows using data as objects and vice versa • Same syntax across any provider • C# Language support • Use it today!

More Related