GroupBy method

In my journey exploring the amazing LINQ world, I stumbled upon the Grouping operator and was fascinated by the operation of grouping objects based on more than one property/field value using LINQ’s GroupBy method:

	class Program
    {
        static void Main(string[] args)
        {
            var employees = new[]
			{
				new Employee()
				{
					Age = 23,
					Name = "Chris",
					JobTitle = "Mechanic"
				},
				new Employee()
				{
					Age = 23,
					Name = "Greg",
					JobTitle = "Designer"
				},
				new Employee()
				{
					Age = 32,
					Name = "Tapiwa",
					JobTitle = "Sales"
				},
				new Employee()
				{
					Age = 24,
					Name = "Francis",
					JobTitle = "Developer"
				},
				new Employee()
				{
					Age = 25,
					Name = "Brian",
					JobTitle = "Designer"
				},
				new Employee()
				{
					Age = 23,
					Name = "Rodney",
					JobTitle = "Developer"
				},
			};

            var query = employees.GroupBy(x => x.Age);
            
            // Enumerate the results
            foreach (var grouping in query)
            {
                Console.WriteLine("Age {0}", grouping.Key);
                foreach (var emp in grouping)
                {
                    Console.WriteLine("-- {0}", emp.Name);
                }
            }

            Console.WriteLine("\n");

            // Using comprehension syntax:
            var q = from employee in employees
                    group employee by employee.Age
                    into grouping
                    orderby grouping.Key
                    select grouping;

            // Enumerate the results
            foreach (var grouping in q)
            {
                Console.WriteLine("Age {0}", grouping.Key);
                foreach (var emp in grouping)
                {
                    Console.WriteLine("-- {0}", emp.Name);
                }
            }
            
            Console.WriteLine("\n");

            // Group objects based on the value more than one field
            var q2 = employees.GroupBy(e => new
			{
				  e.Age,
				  e.JobTitle
			});
            foreach (var grouping in q2)
            {
                Console.WriteLine("Age {0} and Job Title {1}", grouping.Key.Age, grouping.Key.JobTitle);
                foreach (var employee in grouping)
                {
                    Console.WriteLine("-- {0}", employee.Name);
                }
            }

            Console.Read();
        }
    }

    public class Employee
    {
        public int Age { get; set; }
        public string Name { get; set; }
        public string JobTitle { get; set; }
    }

I found yet another interesting operation with this where one can use the result of an aggregation on a grouping, for example:

var queryByJobTitle = from e in employees
                      group e by e.JobTitle into g
                      orderby g.Count() descending
                      select g.Key;

Console.WriteLine(queryByJobTitle.First()); // Designer