Ответ 1
Параметрирование списка диапазонов диапазонов...
var ceilings = new[] { 10, 100, 500 };
var groupings = items.GroupBy(item => ceilings.First(ceiling => ceiling >= item));
Я пытаюсь сгруппировать набор данных, основанный на диапазоне целого числа, по диапазону не увеличивается с фиксированным интервалом.
например. У меня
Идентификационный номер товара
1 10
2 30
3 50
4 120
Я хотел бы сгруппировать предметы по цене 0 - 10, 11 - 100 и 100-500. Итак, элемент 1 находится в группе A, пункт 2,3, в группе B, пункт 4 в группе C.
Ближайший я могу подойти из предметов элементы группы (items.price/10)
затем объединяйте группы, чтобы получить разные диапазоны.
Любые идеи?
Параметрирование списка диапазонов диапазонов...
var ceilings = new[] { 10, 100, 500 };
var groupings = items.GroupBy(item => ceilings.First(ceiling => ceiling >= item));
Как насчет чего-то подобного?
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 ) );
Возможно, что-то вроде (untested):
item.Price <= 10 ? "A" :
(item.Price <= 100 ? "B" : (item.Price <= 500 ? "C" : "X"))
(и группа этим)
Если это LINQ-to-Objects, вы также можете сделать это в статической утилите (GetBand(i)
или аналогичной); или с LINQ-to-SQL вы можете сделать то же самое с скалярным UDF, сопоставленным с контекстом данных.
Вы можете выбрать ints в разных наборах с Linq.
Что-то вроде:
var newList = theList.Where(i => i < 30 && i >10);
Это даст вам все из определенного интервала.