Agrupar por rango de enteros variables utilizando Linq

Intento agrupar un conjunto de datos basado en el rango de un entero, por el rango no aumenta en un intervalo fijo.

por ejemplo, tengo

Precio ID de artículo
1 10
2 30
3 50
4 120

Me gustaría agrupar los artículos con el precio 0 – 10, 11 – 100 y 100-500. Entonces ese ítem 1 está en el grupo A, ítem 2,3, en el grupo B, ítem 4 en el grupo C.

Lo más cerca que puedo llegar es de elementos del grupo de artículos por (items.price / 10)

luego únete a los grupos para obtener los diferentes rangos.

¿Algunas ideas?

Parametrizar la lista de techos de rango …

var ceilings = new[] { 10, 100, 500 }; var groupings = items.GroupBy(item => ceilings.First(ceiling => ceiling >= item)); 

¿Qué tal algo como esto?

 var data = new[] { new { Id = 1, Price = 2 }, new { Id = 1, Price = 10 }, new { Id = 2, Price = 30 }, new { Id = 3, Price = 50 }, new { Id = 4, Price = 120 }, new { Id = 5, Price = 200 }, new { Id = 6, Price = 1024 }, }; var ranges = new[] { 10, 50, 100, 500 }; var grouped = data.GroupBy( x => ranges.FirstOrDefault( r => r > x.Price ) ); 

Tal vez algo así como (no probado):

 item.Price < = 10 ? "A" : (item.Price <= 100 ? "B" : (item.Price <= 500 ? "C" : "X")) 

(y grupo por esto)

Si esto es LINQ-to-Objects, también puede hacer esto en una función de utilidad estática ( GetBand(i) o similar); o con LINQ-to-SQL podría hacer lo mismo con un UDF escalar asignado al contexto de datos.

Puede seleccionar las entradas en diferentes conjuntos con Linq.

Algo como:

  var newList = theList.Where(i => i < 30 && i >10); 

Esto te sacará todas las impresiones de un cierto intervalo.