using System.Collections.Generic;
public string Name {get; set;}
public int Id {get; set;}
public DateTime When {get; set;}
public thing(string name, int id, DateTime when){
public static void Main()
var things = new List<thing>();
things.Add(new thing("one",1,DateTime.Now.AddDays(1)));
things.Add(new thing("one",1,DateTime.Now.AddDays(2)));
things.Add(new thing("two",2,DateTime.Now.AddDays(1)));
var grouped = (from t in things
group t by new {t.Id, t.Name} into g
grouped.ForEach(g => Console.WriteLine(string.Format("{0} ({1}) : {2}", g.Key.Id, g.Key.Name, g.Max(t => t.When))));