31
Extension Methods and LINQ Extension Methods, Anonymous Types LINQ Query Keywords, Lambda Expressions Svetlin Nakov Telerik Software Academy http://academy.telerik.com / Manager Technical Trainer http://www.nakov.com / csharpfundamentals.telerik.com

23. Extension Methods and Linq - C# Fundamentals

Embed Size (px)

DESCRIPTION

This presentation cover the following topics:How to define and using Extension methods? What are Anonymouse types? What is Lamda expression and how to use it?How to use the LINQ Queries in C#?Telerik Software Academy: http://www.academy.telerik.comThe website and all video materials are in Bulgarian.Extension methodsAnonymous types Lambda expressionsLINQ Query keywordsC# Programming Fundamentals Course @ Telerik Academyhttp://academy.telerik.com

Citation preview

Page 1: 23. Extension Methods and Linq - C# Fundamentals

Extension Methods and LINQ

Extension Methods, Anonymous TypesLINQ Query Keywords, Lambda Expressions

Svetlin Nakov

Telerik Software Academyhttp://academy.telerik.com/

Manager Technical Trainerhttp://www.nakov.co

m/

csharpfundamentals.telerik.com

Page 2: 23. Extension Methods and Linq - C# Fundamentals

Contents1. Extension methods

2. Anonymous types

3. Lambda expressions

4. LINQ Query keywords

2

Page 3: 23. Extension Methods and Linq - C# Fundamentals

Extension Methods

Page 4: 23. Extension Methods and Linq - C# Fundamentals

Extension Methods Once a type is defined and compiled into an assembly its definition is, more or less, final The only way to update, remove or

add new members is to recode and recompile the code

Extension methods allow existing compiled types to gain new functionality Without recompilation Without touching the

original assembly4

Page 5: 23. Extension Methods and Linq - C# Fundamentals

Defining Extension Methods

Extension methods Defined in a static class Defined as static Use this keyword before its first

argument to specify the class to be extended

Extension methods are "attached" to the extended class Can also be called from statically

through the defining static class5

Page 6: 23. Extension Methods and Linq - C# Fundamentals

Extension Methods – Examples

6

public static class Extensions{ public static int WordCount(this string str) { return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length; }} ...static void Main(){ string s = "Hello Extension Methods"; int i = s.WordCount(); Console.WriteLine(i);}

Page 7: 23. Extension Methods and Linq - C# Fundamentals

Extension Methods – Examples (2)

7

public static void IncreaseWidth( this IList<int> list, int amount){ for (int i = 0; i < list.Count; i++) { list[i] += amount; }}...static void Main(){ List<int> ints = new List<int> { 1, 2, 3, 4, 5 }; ints.IncreaseWidth(5); // 6, 7, 8, 9, 10}

Page 8: 23. Extension Methods and Linq - C# Fundamentals

Extension MethodsLive Demo

Page 9: 23. Extension Methods and Linq - C# Fundamentals

Anonymous Types

Page 10: 23. Extension Methods and Linq - C# Fundamentals

Anonymous Types Anonymous types

Encapsulate a set of read-only properties and their value into a single object

No need to explicitly define a type first

To define an anonymous type Use of the new var keyword in

conjunction with the object initialization syntax

10

var point = new { X = 3, Y = 5 };

Page 11: 23. Extension Methods and Linq - C# Fundamentals

Anonymous Types – Example

At compile time, the C# compiler will autogenerate an uniquely named class

The class name is not visible from C# Using implicit typing (var keyword)

is mandatory11

// Use an anonymous type representing a carvar myCar = new { Color = "Red", Brand = "BMW", Speed = 180 };

Console.WriteLine("My car is a {0} {1}.", myCar.Color, myCar.Brand);

Page 12: 23. Extension Methods and Linq - C# Fundamentals

Anonymous Types – Properties

Anonymous types are reference types directly derived from System.Object

Have overridden version of Equals(), GetHashCode(), and ToString() Do not have == and != operators

overloaded

12

var p = new { X = 3, Y = 5 };var q = new { X = 3, Y = 5 };Console.WriteLine(p == q); // falseConsole.WriteLine(p.Equals(q)); // true

Page 13: 23. Extension Methods and Linq - C# Fundamentals

Arrays of Anonymous Types

You can define and use arrays of anonymous types through the following syntax:

13

var arr = new[] { new { X = 3, Y = 5 }, new { X = 1, Y = 2 }, new { X = 0, Y = 7 } };foreach (var item in arr){ Console.WriteLine("({0}, {1})", item.X, item.Y);}

Page 14: 23. Extension Methods and Linq - C# Fundamentals

Anonymous TypesLive Demo

Page 15: 23. Extension Methods and Linq - C# Fundamentals

LINQ and Query Keywords

Page 16: 23. Extension Methods and Linq - C# Fundamentals

Lambda Expressions

Page 17: 23. Extension Methods and Linq - C# Fundamentals

Lambda Expressions A lambda expression is an

anonymous function containing expressions and statements Used to create delegates or expression

tree types All lambda expressions use the

lambda operator =>, which is read as "goes to" The left side of the lambda operator

specifies the input parameters

The right side holds the expression or statement 17

Page 18: 23. Extension Methods and Linq - C# Fundamentals

Lambda Expressions – Examples

Usually used with collection extension methods like FindAll() and RemoveAll()

18

List<int> list = new List<int>() { 1, 2, 3, 4 };List<int> evenNumbers = list.FindAll(x => (x % 2) == 0);foreach (var num in evenNumbers){ Console.Write("{0} ", num);}Console.WriteLine();// 2 4

list.RemoveAll(x => x > 3); // 1 2 3

Page 19: 23. Extension Methods and Linq - C# Fundamentals

Sorting with Lambda Expression

19

var pets = new Pet[]{ new Pet { Name="Sharo", Age=8 }, new Pet { Name="Rex", Age=4 }, new Pet { Name="Strela", Age=1 }, new Pet { Name="Bora", Age=3 }};

var sortedPets = pets.OrderBy(pet => pet.Age);

foreach (Pet pet in sortedPets){ Console.WriteLine("{0} -> {1}", pet.Name, pet.Age);}

Page 20: 23. Extension Methods and Linq - C# Fundamentals

Lambda Code Expressions

Lambda code expressions:

20

List<int> list = new List<int>() { 20, 1, 4, 8, 9, 44 };

// Process each argument with code statementsList<int> evenNumbers = list.FindAll((i) => { Console.WriteLine("value of i is: {0}", i); return (i % 2) == 0; });

Console.WriteLine("Here are your even numbers:");foreach (int even in evenNumbers) Console.Write("{0}\t", even);

Page 21: 23. Extension Methods and Linq - C# Fundamentals

Delegates Holding Lambda Functions

Lambda functions can be stored in variables of type delegate Delegates are typed references to

functions

Standard function delegates in .NET: Func<TResult>, Func<T, TResult>, Func<T1, T2, TResult>, …

21

Func<bool> boolFunc = () => true;Func<int, bool> intFunc = (x) => x < 10;if (boolFunc() && intFunc(5)) Console.WriteLine("5 < 10");

Page 22: 23. Extension Methods and Linq - C# Fundamentals

Lambda ExpressionsLive Demo

Page 23: 23. Extension Methods and Linq - C# Fundamentals

LINQ and Query Keywords

Language Integrated Query (LINQ) query keywords from – specifies data source and

range variable where – filters source elements select – specifies the type and

shape that the elements in the returned sequence

group – groups query results according to a specified key value

orderby – sorts query results in ascending or descending order

23

Page 24: 23. Extension Methods and Linq - C# Fundamentals

Query Keywords – Examples

select, from and where clauses:

24

int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

var querySmallNums = from num in numbers where num < 5 select num;

foreach (var num in querySmallNums){ Console.Write(num.ToString() + " ");}// The result is 4 1 3 2 0

Page 25: 23. Extension Methods and Linq - C# Fundamentals

Query Keywords – Examples (2)

Nested queries:

25

string[] towns = { "Sofia", "Varna", "Pleven", "Ruse", "Bourgas" };

var townPairs = from t1 in towns from t2 in towns select new { T1 = t1, T2 = t2 };

foreach (var townPair in townPairs){ Console.WriteLine("({0}, {1})", townPair.T1, townPair.T2);}

Page 26: 23. Extension Methods and Linq - C# Fundamentals

Query Keywords – Examples (3)

Sorting with оrderby:

26

string[] fruits = { "cherry", "apple", "blueberry", "banana" };

// Sort in ascending sortvar fruitsAscending = from fruit in fruits orderby fruit select fruit;

foreach (string fruit in fruitsAscending){ Console.WriteLine(fruit);}

Page 27: 23. Extension Methods and Linq - C# Fundamentals

LINQ Query KeywordsLive Demo

Page 28: 23. Extension Methods and Linq - C# Fundamentals

форум програмиране, форум уеб дизайнкурсове и уроци по програмиране, уеб дизайн – безплатно

програмиране за деца – безплатни курсове и уроцибезплатен SEO курс - оптимизация за търсачки

уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop

уроци по програмиране и уеб дизайн за ученициASP.NET MVC курс – HTML, SQL, C#, .NET, ASP.NET MVC

безплатен курс "Разработка на софтуер в cloud среда"

BG Coder - онлайн състезателна система - online judge

курсове и уроци по програмиране, книги – безплатно от Наков

безплатен курс "Качествен програмен код"

алго академия – състезателно програмиране, състезания

ASP.NET курс - уеб програмиране, бази данни, C#, .NET, ASP.NETкурсове и уроци по програмиране – Телерик академия

курс мобилни приложения с iPhone, Android, WP7, PhoneGap

free C# book, безплатна книга C#, книга Java, книга C#Дончо Минков - сайт за програмиранеНиколай Костов - блог за програмиранеC# курс, програмиране, безплатно

?

? ? ??

?? ?

?

?

?

??

?

?

? ?

Questions?

?

Extension Methods and LINQ

http://academy.telerik.com/

Page 29: 23. Extension Methods and Linq - C# Fundamentals

Exercises1. Implement an extension method

Substring(int index, int length) for the class StringBuilder that returns new StringBuilder and has the same functionality as Substring in the class String.

2. Implement a set of extension methods for IEnumerable<T> that implement the following group functions: sum, product, min, max, average.

3. Write a method that from a given array of students finds all students whose first name is before its last name alphabetically. Use LINQ query operators.

4. Write a LINQ query that finds the first name and last name of all students with age between 18 and 24.

29

Page 30: 23. Extension Methods and Linq - C# Fundamentals

Exercises (2)5. Using the extension methods OrderBy()

and ThenBy() with lambda expressions sort the students by first name and last name in descending order. Rewrite the same with LINQ.

6. Write a program that prints from given array of integers all numbers that are divisible by 7 and 3. Use the built-in extension methods and lambda expressions. Rewrite the same with LINQ.

7. Write extension method to the String class that capitalizes the first letter of each word. Use the method TextInfo.ToTitleCase().

30

Page 31: 23. Extension Methods and Linq - C# Fundamentals

Free Trainings @ Telerik Academy

Fundamentals of C# ProgrammingCourse csharpfundamentals.telerik.com

Telerik Software Academy academy.telerik.com

Telerik Academy @ Facebook facebook.com/TelerikAcademy

Telerik Software Academy Forums forums.academy.telerik.com