Presentation is loading. Please wait.

Presentation is loading. Please wait.

C# 3.0 and LINQ Pavel Yosifovich CTO, Hi-Tech College

Similar presentations


Presentation on theme: "C# 3.0 and LINQ Pavel Yosifovich CTO, Hi-Tech College"— 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 Introduction C# 3.0 New Features Introduction to LINQ LINQ to Objects LINQ to SQL LINQ to XML Summary 2©2008 Pavel Yosifovich

3 .NET Roadmap YearCLR.NETVisual StudioC# 20021.0 20021.0 20031.1 20031.0 20052.0 20052.0 20062.03.0.NET 3.0 ext.2.0 20072.03.520083.0 2009?4.0 20104.0

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

5 Implicitly Typed Local Variables The var keyword // C# 2.0 int x = 5; string name = "Bart Simpson"; Dictionary data = new Dictionary (); int size = name.Length; // C# 2.0 int x = 5; string name = "Bart Simpson"; Dictionary data = new Dictionary (); int size = name.Length; // C# 3.0 var x = 5; var name = "Bart Simpson"; var data = new Dictionary (); var size = name.Length; var y = x; var keys = data.Keys;// Dictionary.KeyCollection // C# 3.0 var x = 5; var name = "Bart Simpson"; var data = new Dictionary (); var size = name.Length; var y = x; var keys = data.Keys;// Dictionary.KeyCollection 5©2008 Pavel Yosifovich

6 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# 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; } } public class Person {// C# 3.0 public string FirstName { get; set; } public string LastName { get; set; } public int Age { get; set; } } 6©2008 Pavel Yosifovich

7 Object Initializers // C# 2.0 Person p = new Person(); p.FirstName = "Bart"; p.LastName = "Simpson"; p.Age = 12; // 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 }; // C# 3.0 Person p = new Person() { FirstName = "Bart", LastName = "Simpson", Age = 12 }; 7©2008 Pavel Yosifovich

8 Collection Initializers // C# 3.0 List people = new List (); 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 List people = new List (); 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 () { new Person() { FirstName = "Bart", LastName = "Simpson", Age = 12 }, new Person() { FirstName = "Clark", LastName = "Kent", Age = 35 }, new Person() { FirstName = "Peter", LastName = "Parker", Age = 30 } }; // C# 3.0 var people = new List () { new Person() { FirstName = "Bart", LastName = "Simpson", Age = 12 }, new Person() { FirstName = "Clark", LastName = "Kent", Age = 35 }, new Person() { FirstName = "Peter", LastName = "Parker", Age = 30 } }; 8©2008 Pavel Yosifovich

9 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 (var i in people) Console.WriteLine("{0} {1} ({2})", i.FirstName, i.LastName, i.Age); Console.WriteLine(people[0].GetType().FullName);// ??? 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 (var i in people) Console.WriteLine("{0} {1} ({2})", i.FirstName, i.LastName, i.Age); Console.WriteLine(people[0].GetType().FullName);// ??? 9©2008 Pavel Yosifovich

10 Extension Methods public static class MyExtensions { public static string UpperLower(this string str, bool upperFirst) { StringBuilder newString = new StringBuilder(str.Length); for (int i = 0; i < str.Length; i++) { newString.Append(upperFirst ? char.ToUpper(str[i]) : char.ToLower(str[i])); upperFirst = !upperFirst; } return newString.ToString(); } public static class MyExtensions { public static string UpperLower(this string str, bool upperFirst) { StringBuilder newString = new StringBuilder(str.Length); for (int i = 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)); string input = Console.ReadLine(); Console.WriteLine("calling extension method for {0}: {1}", input, input.UpperLower(true)); 10©2008 Pavel Yosifovich

11 EXTENSION METHODS DEMO

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

13 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 13©2008 Pavel Yosifovich

14 LINQ enabled ADO.NET LINQ Architecture XML Objects Relational Data.NET Language-Integrated Query (LINQ) 14©2008 Pavel Yosifovich

15 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 15©2008 Pavel Yosifovich

16 LINQ To Objects Working with collections –Any one that implements IEnumerable using System.Linq System.Core.Dll assembly Deferred Execution

17 LINQ TO OBJECTS DEMO

18 Classic ADO.NET SqlConnection conn = new SqlConnection(“...“); SqlCommand cmd = 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"]); } SqlConnection conn = new SqlConnection(“...“); SqlCommand cmd = 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"]); } Application Relational Database No intellisence No compile time checks Loosely bound arguments Untyped Results

19 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

20 LINQ TO SQL DEMO

21 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 (…)

22 Handling Concurrency Optimistic concurrency mode IsVersion property on Column attribute UpdateCheck property – Always (default) – Never – WhenChanged SubmitChanges argument – FailOnConflict (default) – ContinueOnColflict DataContext has ChangedConflicts ©2008 Pavel Yosifovich22

23 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

24 LINQ TO XML DEMO

25 ©2008 Pavel Yosifovich25 Q & A ?

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


Download ppt "C# 3.0 and LINQ Pavel Yosifovich CTO, Hi-Tech College"

Similar presentations


Ads by Google