using System.Collections.Generic;
using System.Globalization;
public static void Main()
List<Foo> cv = new List<Foo>(){
new Foo(){id = "01200", date = DateTime.ParseExact("11/11/2020", "dd/MM/yyyy", CultureInfo.InvariantCulture)},
new Foo(){id = "01200", date = DateTime.ParseExact("11/11/2021", "dd/MM/yyyy", CultureInfo.InvariantCulture)},
new Foo(){id = "02100", date = DateTime.ParseExact("01/01/2019", "dd/MM/yyyy", CultureInfo.InvariantCulture)},
new Foo(){id = "02100", date = DateTime.ParseExact("01/01/2029", "dd/MM/yyyy", CultureInfo.InvariantCulture)}
where !(c3.id == null || c3.id.Trim() == string.Empty)
group c3 by c3.id into cgroup
MaxDate = cgroup.Max(x => x.date),
) on new { JoinProperty1 = c.id, JoinProperty2 = c.date } equals
new { JoinProperty1 = c2.ID, JoinProperty2 = c2.MaxDate }
select c).Aggregate((u,v) => u.date < v.date ? u: v);
(key, g) => new { id = key, date = g.Max() }).ToList<Foo>().Aggregate((u,v) => u.date < v.date ? u: v);