我正在尝试根据整数范围对一组数据进行分组,但该范围不会以固定的间隔增加。
e.g。我有
物品ID价格
1 10
2 30
3 50
4 120
我想将价格分为0 - 10,11 - 100和100-500。因此,项目1在组A中,项目2,3,在组B中,项目4在组C中。
我最接近的是 从项目 分组项目(items.price / 10)
然后将各个小组加在一起以获得不同的范围。
有什么想法吗?
答案 0 :(得分:30)
参数化范围上限列表......
var ceilings = new[] { 10, 100, 500 };
var groupings = items.GroupBy(item => ceilings.First(ceiling => ceiling >= item));
答案 1 :(得分:5)
这样的事情怎么样?
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 ) );
答案 2 :(得分:2)
也许像(未经测试):
item.Price <= 10 ? "A" :
(item.Price <= 100 ? "B" : (item.Price <= 500 ? "C" : "X"))
(并由此分组)
如果这是LINQ-to-Objects,您也可以在静态实用程序函数(GetBand(i)
或类似函数)中执行此操作;或者使用LINQ-to-SQL,您可以使用映射到数据上下文的标量UDF执行相同的操作。
答案 3 :(得分:-1)
您可以使用Linq选择不同组中的整数。
类似的东西:
var newList = theList.Where(i => i < 30 && i >10);
这将从一定的时间间隔内获得所有这些。