Use o método GroupBy para agrupar objetos com base em mais de um valor de propriedade / campo

É muito comum usar o método GroupBy para agrupar objetos com base no valor do campo, propriedade ou método retornado.
var groupedByAge = people.GroupBy (p => p.Age);

Mas você também pode agrupar objetos com base no valor de não apenas um campo, mas mais.
Exemplo:

var people = new[]
{
new Person
{
Name = "Marwan",
Age = 25,
JobTitle ="Developer"
},
new Person
{
Name = "Hamed",
Age = 24,
JobTitle ="Designer"
},
new Person
{
Name = "Atef",
Age = 24,
JobTitle ="Designer"
},
new Person
{
Name = "Khaled",
Age = 24,
JobTitle ="DB Admin"
}
};

var byAge = people.GroupBy(p => p.Age);
foreach (var group in byAge)
{
Console.WriteLine("Age {0}", group.Key);
foreach (var person in group)
{
Console.WriteLine("t{0}", person.Name);
}
}

var byAgeAndJobTitle = people
.GroupBy(p => new {
p
.Age,
p
.JobTitle
});
foreach (var group in byAgeAndJobTitle)
{
Console.WriteLine("Age {0} and Job Title {1}",
group.Key.Age, group.Key.JobTitle);
foreach (var person in group)
{
Console.WriteLine("t{0}", person.Name);
}
}

Console.Read();