Monday, 10 July 2017

Select and SelectMany in LINQ

Select and SelectMany are projection operators. Select operator is used to select value from a collection and SelectMany operator is used to select values from a collection of collection i.e. nested collection.

Example: 

class Employee
{
 public string Name { get; set; }
 public List<string> Skills { get; set; }
}
 
class Program
{
 static void Main(string[] args)
 {
 List<Employee> employees = new List<Employee>();
 Employee emp1 = new Employee { Name = "Deepak", Skills = new List<string> { "C", "C++", "Java" } };
 Employee emp2 = new Employee { Name = "Karan", Skills = new List<string> { "SQL Server", "C#", "ASP.NET" } };
 
 Employee emp3 = new Employee { Name = "Lalit", Skills = new List<string> { "C#", "ASP.NET MVC", "Windows Azure", "SQL Server" } };
 
 employees.Add(emp1);
 employees.Add(emp2);
 employees.Add(emp3);
 
 // Query using Select()
 IEnumerable<List<String>> resultSelect = employees.Select(e=> e.Skills);
 
 Console.WriteLine("**************** Select ******************");
 
 // Two foreach loops are required to iterate through the results
 // because the query returns a collection of arrays.
 foreach (List<String> skillList in resultSelect)
 {
 foreach (string skill in skillList)
 {
 Console.WriteLine(skill);
 }
 Console.WriteLine();
 }
 
 // Query using SelectMany()
 IEnumerable<string> resultSelectMany = employees.SelectMany(emp => emp.Skills);
 
 Console.WriteLine("**************** SelectMany ******************");
 
 // Only one foreach loop is required to iterate through the results 
 // since query returns a one-dimensional collection.
 foreach (string skill in resultSelectMany)
 {
 Console.WriteLine(skill);
 }
 
 Console.ReadKey();
 }
}
 
/* Output
 
**************** Select ******************
 
C
C++
Java
 
SQL Server
C#
ASP.NET
 
C#
ASP.NET MVC
Windows Azure
SQL Server
 
**************** SelectMany ******************
 
C
C++
Java
SQL Server
C#
ASP.NET
C#
ASP.NET MVC
Windows Azure
SQL Server
*/

0 comments:

Post a Comment

Topics

ADO .Net (2) Ajax (1) Angular Js (17) Angular2 (24) ASP .Net (14) Azure (1) Breeze.js (1) C# (49) CloudComputing (1) CMS (1) CSS (2) Design_Pattern (3) DI (3) Dotnet (21) Entity Framework (3) ExpressJS (4) Html (3) IIS (1) Javascript (6) Jquery (9) Lamda (3) Linq (11) Mongodb (1) MVC (48) NodeJS (7) RDLC (1) Report (1) Sql Server (29) SSIS (3) SSRS (2) UI (1) WCF (12) Web Api (9) Web Service (1) XMl (1)