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);
    }
  }
}
Read the full lesson