Friday 17 August 2012

LINQ Samples

Linq samples
I will cover few examples which are using query operators. You can find list of query operators Here

Refer Player class
Code
 
public class Player
  {
      public string FirstName { get; set; }
      public string LastName { get; set; }
      public string Country { get; set; }
      public int[] Scores { get; set; }
      public int ManOfTheSeries { get; set; }
 
  }


 

Type Filtering


Filtering based on the type.



Code




// FILTERING
          Console.WriteLine("List of batsmans who have scrored more than 50 runs in their First Match");
          foreach (Player s in query)
              Console.WriteLine(s.FirstName + " " + s.LastName + ": " + s.Scores[0]);
 
           // Keep the console window open in debug mode.
         
 
 
           //TYPE FILTERING
           //GET the int data from the type which contains both string and int.
           object[] sampleObject = {1,2,"Three",4,5,"Six","Seven",
                                           new Player{
                                                       FirstName = "Virat",
                                                       LastName="Kohli",
                                                       Country="India", 
                                                       Scores = new int[] { 107, 119, 125, 114 }
                                                   } 
                                   };
           //Get the string 
           var queryTypeFilteringString = sampleObject.OfType<string>();
 
           Console.WriteLine("");
           Console.WriteLine("String Type");
           foreach (var item in queryTypeFilteringString)
           {
               Console.WriteLine(item);
           }
 
           //Get the Int
           var queryTypeFilteringInt = sampleObject.OfType<int>();
 
           Console.WriteLine("");
           Console.WriteLine("Int Type");
           foreach (var item in queryTypeFilteringInt)
           {
               Console.WriteLine(item);
           }
 
           //Get Player
           var queryTypeFilteringPlayer = sampleObject.OfType<Player>();
 
           Console.WriteLine("");
           Console.WriteLine("Player Type");
           foreach (var item in queryTypeFilteringPlayer)
           {
               Console.WriteLine(item.FirstName + " "+ item.LastName);
           }

Output






String Type
Three
Six
Seven
 
Int Type
1
2
4
5
 
Player Type
Virat Kohli
Press any key to exit.



Compound Form

Below query will provide list of batsmans who have scored century (100) and above.

Code






 
            //Compound
            Console.WriteLine("List of batsman who have scored Century (100) in their Matches");
            var queryFilter = playerList
                              .SelectMany(
                               p=>p.Scores,
                              (p,s) => new {Player=p,Score=s})
                             .Where(p => p.Score > 100)
                             .OrderBy(p=>p.Player.FirstName)
                             .Select(a => a.Player.FirstName +" "+a.Player.LastName + " " + Convert.ToString(a.Score) );
 
 
            foreach (string s in queryFilter)
                     Console.WriteLine(s);

Output






Hashim Amla 165
Mahela Jayawardene 185
Ricky Ponting 180
Ricky Ponting 142
Sachin Tendulkar 200
Sachin Tendulkar 190
Sachin Tendulkar 170
Sachin Tendulkar 150
Press any key to exit.


Sorting
The OrderBy() and OrderByDescending() Methds returns IOrderedEnumerable<TSource>.

Code




//Indian Players with their scores, descending order by LastName

           var sortQuery = playerList

                           .SelectMany(p => p.Scores,

                           (p, s) => new { Player = p, Score = s })

                           .Where(p => p.Player.Country == "India")

                           .OrderByDescending(p => p.Player.LastName)

                            .Select(p => p);


Output




Sachin Tendulkar India 200

Sachin Tendulkar India 190

Sachin Tendulkar India 170

Sachin Tendulkar India 150

Virender Sehwag India 225

Virender Sehwag India 170

Virender Sehwag India 184

Virender Sehwag India 102

Press any key to exit.



Group By

To Group query results based on a key value ,the  group clause can be used.

Code




// List of plyers count group by countries

            var countiresQry = from p in playerList

                               group p by p.Country into g

                               orderby g.Count() >= 2

                               select new

                                   {

                                       Country = g.Key,

                                       Count = g.Count()

                                   };



Above Query with Extension methods




var countiresQry = playerList.

                             GroupBy(p=>p.Country).

                             OrderByDescending(g=>g.Count()).

                             ThenBy(g=>g.Key).

                             Where(g=>g.Count()>1).

                             Select(g=>new {Country= g.Key, Count=g.Count()});



Output




India      2

Australia  2

Sri Lanka  2

South Africa 2

Press any key to exit.










Grouping With Nested Objects

Code




var countiresQry = playerList.

                              GroupBy(p=>p.Country).

                              OrderByDescending(g=>g.Count()).

                              ThenBy(g=>g.Key).

                              Where(g=>g.Count()>=2).

                              Select(g=>new 

                                   {

                                       Country= g.Key, 

                                       Count=g.Count(),

                                       Players = g.OrderBy(r => r.LastName).Select(r => r.FirstName + " " + r.LastName)

                               });

                              

                                  

           foreach (var item in countiresQry)

           {

               Console.WriteLine("Country:{0,-10}  Plyer Count:{1}", item.Country, item.Count);

               foreach (var name in item.Players)

               {

                   Console.Write(" Player Name:{0}\n ",name);

               }

               Console.WriteLine();

           }

Output




Country:Australia   Plyer Count:2

 Player Name:Adam Gilchrist

  Player Name:Ricky Ponting

 

Country:India       Plyer Count:2

 Player Name:Virender Sehwag

  Player Name:Sachin Tendulkar

 

Country:South Africa  Plyer Count:2

 Player Name:Hashim Amla

  Player Name:Graeme Smith

 

Country:Sri Lanka   Plyer Count:2

 Player Name:Mahela Jayawardene

  Player Name:Kumar Sangakara

 

Press any key to exit.

No comments:

Post a Comment

Translate