Monday, October 8, 2012

Lambda Expression over List in C#

Sometimes if you have a set of records in a List, it becomes quite easy to query on list using Lamda Expression. This article exemplify that how we can perform several tasks and queries over list.

Suppose we have a “Person” class that has following members:
class Person
    {
        public string SSN;
        public string Name;
        public string Address;
        public int Age;

        public Person(string ssn, string name, string addr, int age)
        {
            SSN = ssn;
            Name = name;
            Address = addr;
            Age = age;
        }
    }
Now we create a list of the Person objects in which we have to perform several operations like finding a person on certain conditions, removing person’s record etc. These types of operation can be easily performed by using “Lambda Expression”. We create the list and populate them in following way:
List<Person> listPersonsInCity = new List<Person>();

         listPersonsInCity.Add(new Person("203456876", "John",    "12 Main Street, Newyork, NY",      15));
         listPersonsInCity.Add(new Person("203456877", "SAM",     "13 Main Ct, Newyork, NY",          25));
         listPersonsInCity.Add(new Person("203456878", "Elan",    "14 Main Street, Newyork, NY",      35));
         listPersonsInCity.Add(new Person("203456879", "Smith",   "12 Main Street, Newyork, NY",      45));
         listPersonsInCity.Add(new Person("203456880", "SAM",     "345 Main Ave, Dayton, OH",         55));
         listPersonsInCity.Add(new Person("203456881", "Sue",     "32 Cranbrook Rd, Newyork, NY",     65));
         listPersonsInCity.Add(new Person("203456882", "Winston", "1208 Alex St, Newyork, NY",        65));
         listPersonsInCity.Add(new Person("203456883", "Mac",     "126 Province Ave, Baltimore, NY",  85));
         listPersonsInCity.Add(new Person("203456884", "SAM",     "126 Province Ave, Baltimore, NY",  95));

Now we see how we can do various complex operations on the list using one liner simple lambda expression.

(1) Following code retrieves the first two persons from the list who are older than 60 years:
Console.WriteLine("\n-----------------------------------------------------------------------------");
Console.WriteLine("Retrieving Top 2 aged persons from the list who are older than 60 years\n");
foreach (Person person in listPersonsInCity.FindAll(e => (e.Age >= 60)).Take(2).ToList())
{
Console.WriteLine("Name : " + person.Name + " \t\tAge: " + person.Age);
}
The output is:
-----------------------------------------------------------------------------
Retrieving Top 2 aged persons from the list who are older than 60 years
Name : Sue             Age: 65
Name : Winston         Age: 65
-----------------------------------------------------------------------------
(2) Following code checks any person’s age falls between 13 to 19 years:
Console.WriteLine("\nChecking whether any person is teen-ager or not...");
if (listPersonsInCity.Any(e => (e.Age >= 13 && e.Age <= 19)))
{
Console.WriteLine("Yes, we have some teen-agers in the list");
}
The output is:
-----------------------------------------------------------------------------
 Checking whether any person is teen-ager or not...
 Yes, we have some teen-agers in the list
-----------------------------------------------------------------------------

(3) Following code checks whether all the person’s age is greater than Ten years or not:
Console.WriteLine("\nCheking whether all the persons are older than 10 years or not...");
if ( listPersonsInCity.All(e => (e.Age > 10)))
{
Console.WriteLine("Yes, all the persons older than 10 years");
}
The output is:
-----------------------------------------------------------------------------
Cheking whether all the persons are older than 10 years or not...
 Yes, all the persons older than 10 years
-----------------------------------------------------------------------------

(4) Following code gets average of all the person’s age:
Console.WriteLine("\nGetting Average of all the person's age...");
double avgAge = listPersonsInCity.Average(e => e.Age);
Console.WriteLine("The average of all the person's age is: "+ avgAge);
The output is:
-----------------------------------------------------------------------------
 Getting Average of all the person's age...
 The average of all the person's age is: 53.8888888888889
-----------------------------------------------------------------------------

(5) Following code checks whether a person having name 'SAM' exists or not:
Console.WriteLine("\nChecking whether a person having name 'SAM' exists or not...");
if (listPersonsInCity.Exists(e => e.Name == "SAM"))
{
Console.WriteLine("Yes, A person having name  'SAM' exists in our list");
}
The output is:
-----------------------------------------------------------------------------
 Checking whether a person having name 'SAM' exists or not...
 Yes, A person having name  'SAM' exists in our list
-----------------------------------------------------------------------------

(6) Following code checks at what position a person having name 'Smith' exists in the list:
Console.WriteLine("\nChecking the index position of a person having name 'Smith' ...");
int indexForSmith = listPersonsInCity.FindIndex(e => e.Name == "Smith");
Console.WriteLine("In the list, The index position of a person having name 'Smith' is : " + indexForSmith);
The output is:
-----------------------------------------------------------------------------
 Checking the index position of a person having name 'Smith' ...
 In the list, The index position of a person having name 'Smith' is : 3
-----------------------------------------------------------------------------

(7) Following code retrieves  the oldest person in the list:
Console.WriteLine("\nGetting the name of the most aged person in the list ...");
Person p = listPersonsInCity.First(m=> m.Age == (listPersonsInCity.Max(e => e.Age)));
Console.WriteLine("The most aged person in our list is: "+ p.Name +" whose age is: "+ p.Age);
The output is:
-----------------------------------------------------------------------------
 Getting the name of the most aged person in the list ...
 The most aged person in our list is: SAM whose age is: 95
-----------------------------------------------------------------------------

(8) Following code gets the total of all the person’s age:
Console.WriteLine("\nGetting Sum of all the person's age...");
int sumOfAges = listPersonsInCity.Sum(e => e.Age);
Console.WriteLine("The sum of all the persons's age = "+ sumOfAges);
The output is:
-----------------------------------------------------------------------------
 Getting Sum of all the person's age...
 The sum of all the persons's age = 485
-----------------------------------------------------------------------------

(9) Following code skips each person  whose age is less than 60:
Console.WriteLine("\nSkipping every person whose age is less than 60 years...");
foreach (Person pers in listPersonsInCity.SkipWhile(e => e.Age < 60))
{
Console.WriteLine("Name : "+ pers.Name + " \t\tAge: "+ pers.Age);
}

The output is:
-----------------------------------------------------------------------------
 Skipping every person whose age is less than 60 years...
 Name : Sue             Age: 65
 Name : Winston         Age: 65
 Name : Mac             Age: 85
 Name : SAM             Age: 95
-----------------------------------------------------------------------------

(10) Following code retrieves all the person until we find a person with name beginning other than letter ‘S’ :
Console.WriteLine("Displaying the persons until we find a person with name starts with other than 'S'");
foreach (Person pers in listPersonsInCity.TakeWhile(e => e.Name.StartsWith("J")))
{
Console.WriteLine("Name : " + pers.Name + " \t\tAge: " + pers.Age);
}
The output is:
-----------------------------------------------------------------------------
 Displaying the persons until we find a person with name starts with other than 'S'
 Name : John            Age: 15
-----------------------------------------------------------------------------
(11) Following code checks whether all the person have their SSN or not :
Console.WriteLine("\nChecking all the persons have SSN or not ...");
if(listPersonsInCity.TrueForAll(e => e.SSN != null))
{
Console.WriteLine("No person is found without SSN");
}
The output is:
-----------------------------------------------------------------------------
 Checking all the persons have SSN or not ...
 No person is found without SSN
-----------------------------------------------------------------------------

(12) Following code removes all the persons having “SAM” name :
Console.WriteLine("\nRemoving all the persons record from list that have “SAM” name");
listPersonsInCity.RemoveAll(e => (e.Name == "SAM"));
if (listPersonsInCity.TrueForAll(e => e.Name != "SAM"))
{
Console.WriteLine("No person is found with 'SAM' name in current list");
}

The output is:
-----------------------------------------------------------------------------
 Removing all the persons record from list that have "SAM" name
 No person is found with 'SAM' name in current list
-----------------------------------------------------------------------------

(13) Following code searches person having “203456876” SSN :
Console.WriteLine("\nFinding the person whose SSN = 203456876 in the list");
Person oPerson = listPersonsInCity.Find(e => (e.SSN == "203456876"));
Console.WriteLine("The person having SSN '203456876' is : " + oPerson.Name + " \t\tAge: " + oPerson.Age);
The output is:
-----------------------------------------------------------------------------
 Finding the person whose SSN = 203456876 in the list
 The person having SSN '203456876' is : John            Age: 15
-----------------------------------------------------------------------------

No comments:

Post a Comment