var query2 = invoices.GroupBy(x => x.clientid) .Select(group => new { Id = group.Key, invs = group.OrderByDescending(x => x.invoiceamount) }) .OrderByDescending(group => group.invs.Sum(x => x.invoiceamount)); foreach (var q in query2.ToList()) { Console.WriteLine("\nClient Id: {0}.", q.Id); foreach (var x in q.invs) { Console.WriteLine("\t{0:C}", x.invoiceamount); } Console.WriteLine("\n\tTotal: {0:c}\n", q.invs.Sum(x => x.invoiceamount)); }The last .OrderByDescending is just a frill so that the clients are listed in order of total invoices value.