C#: relational queries with LINQ join and group
LINQ (Language Integrated Query) brings relational-style queries into C#. Its query syntax mirrors SQL: from names a row, join ... on ... equals ... matches rows by key, orderby sorts, and select shapes the result. The same operations are available as methods such as Join, GroupBy, and OrderBy.
C#
using System;
using System.Linq;
class Program {
static void Main() {
var departments = new[] { new { Id = 1, Title = "Eng" }, new { Id = 2, Title = "Ops" } };
var staff = new[] {
new { Name = "Ada", Dept = 1, Salary = 120 },
new { Name = "Bo", Dept = 2, Salary = 90 },
new { Name = "Cy", Dept = 1, Salary = 100 },
new { Name = "Di", Dept = 3, Salary = 80 },
};
var joined = (from e in staff
join d in departments on e.Dept equals d.Id
orderby e.Name
select new { e.Name, d.Title, e.Salary }).ToList();
foreach (var row in joined) {
Console.WriteLine(row.Name + " " + row.Title + " " + row.Salary);
}
var totals = joined.GroupBy(r => r.Title)
.Select(g => g.Key + ": " + g.Sum(r => r.Salary))
.OrderBy(text => text);
foreach (var line in totals) {
Console.WriteLine(line);
}
}
}