public class Invoice { public double invoiceamount { get; set; } public int clientid { get; set; } }
const double invoiceFilterAmount = 100; IEnumerable<Invoice> invoices = new List<Invoice>() { new Invoice() {invoiceamount = 123.34, clientid=1}, new Invoice() {invoiceamount = 19.24, clientid = 2}, new Invoice() {invoiceamount = 47.24,clientid = 2}, new Invoice() {invoiceamount = 1000.00, clientid = 1}, new Invoice() {invoiceamount = 122.56, clientid = 2}, new Invoice() {invoiceamount = 99.99, clientid = 1}, new Invoice() {invoiceamount = 100.00,clientid = 2}, }; var query = invoices.Where(x => x.invoiceamount <= invoiceFilterAmount) .OrderByDescending(x => x.invoiceamount) .GroupBy(x => x.clientid);May not be super efficient since it's sorting all invoices rather than just those within each group - but I don't think you can do that without anonymous types.