关于c#:使用Linq按可变整数范围分组

Group by variable integer range using Linq

我正在尝试根据整数的范围对一组数据进行分组,但范围不会以固定的间隔增加。

例如 我有

商品ID价格
1 10
2 30
3 50
4120

我想将价格为0-10、11-100和100-500的商品分组。 因此,项目1在组A中,项目2,3在组B中,在组C中在项目4。

我能想到的最接近的是
从项目
按(items.price / 10)分组项目

然后将各组放在一起以获得不同的范围。

有任何想法吗?


参数化范围上限列表...

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


这样的事情怎么样?

1
2
3
4
5
6
7
8
9
10
11
12
13
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 ) );

可能类似(未测试):

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

(并以此分组)

如果这是LINQ-to-Objects,则还可以在静态实用程序功能(GetBand(i)或类似功能)中执行此操作。 或使用LINQ-to-SQL,您可以对映射到数据上下文的标量UDF执行相同的操作。


您可以使用Linq选择不同集合中的整数。

就像是:

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

这将使您从一定的时间间隔中获得全部收益。