Cómo agrupar en tres grupos con LINQ para c #

Tengo objetos de "Factura" que tienen una propiedad Precio . Aquí están mis datos:

Invoice[] arrayOfInvoices = new Invoice[] {     
                new Invoice(83,"Electric Sander",7,57.98m)
            ,   new Invoice(24,"Power Saw",18,99.99m)
            ,   new Invoice(7,"Sledge hammer",11,21.50m)
            ,   new Invoice(77,"Hammer", 76, 11.99m)
            ,   new Invoice(39,"Lawn mower", 3, 79.50m)
            ,   new Invoice(68,"Screwdriver", 106, 6.99m)
            ,   new Invoice(56,"Jig saw", 21, 11.00m)
            ,   new Invoice(3,"Wrench", 34, 7.50m)};

Intento agrupar facturas en tres grupos: facturas con precio unitario inferior a 10, facturas con precio unitario entre 10 y 20 y facturas con un precio unitario superior a 20. ¿Sabes cómo puedo hacer eso?

0
Seguramente sería más fácil poner las comas al final de la línea.
agregado el autor Jeroen Vannevel, fuente

1 Respuestas

Solo usaría el operador condicional para crear una declaración tipo interruptor:

arrayOfInvoices.GroupBy(i => i.Price < 10 ? 0 :
                             i.Price < 20 ? 1 :
                             /*else*/       2)

Para ordenar dentro de los grupos solo haga un OrderBy antes de comenzar a agrupar:

arrayOfInvoices.OrderBy(i => i.Price)
               .GroupBy(i => i.Price < 10 ? 0 :
                             i.Price < 20 ? 1 :
                             /*else*/       2)
0
agregado
¡Esto es impresionante!
agregado el autor user2128702, fuente
Si tuviera que agregar un orden descendente o ascendente a los grupos resultantes, ¿cómo podría hacerlo?
agregado el autor user2128702, fuente
Sí, exactamente por precio.
agregado el autor user2128702, fuente
Ordenando por qué? ¿Precio?
agregado el autor D Stanley, fuente
@ user2128702 agregado a mi respuesta
agregado el autor D Stanley, fuente