我有对象列表(ID,Price,SalesID)
如何根据一系列价格值对此列表进行分组?
从0-10,10-20,> 20
说我想将输出作为一个群组列表
0-9 -> object1,object2
10-20 -> object3,object5,object7
>20 -> object8,object10,object11..
答案 0 :(得分:3)
这会将它们分组在> 20,10-20,<10的范围内(即0-9,因为价格不能低于0我假设)。
objects.GroupBy(x => x.Price > 20 ? 2 : x.Price >= 10 ? 1 : 0)
答案 1 :(得分:1)
我会创建包含范围名称的组:
var result = prices.GroupBy(x => x.Price < 10 ? "0-10"
: x.Price < 20 ? "10-20" : ">20")
.Select(g => new { g.Key, g }
(假设&lt; 0不存在)
答案 2 :(得分:0)
这应该有效:
objects.GroupBy(o=>o.Price>=20?2:(int)(o.Price/10))
答案 3 :(得分:0)
您可以这样做:
定义enum
来表示您的范围:
public enum PriceRange {
LessThanTen,
TenToTwenty,
MoreThanTwenty
}
然后在某处定义类似于以下的方法:
private static PriceRange ExtractRange(MyClass o) {
if (o.Price < 10)
return PriceRange.LessThanTen;
else if (o.Price <= 20)
return PriceRange.TenToTwenty;
else
return PriceRange.MoreThanTwenty;
}
你可以这样做:
var groups = myObjects.GroupBy(m => ExtractRange(m));
您可以这样输出:
foreach( var g in grp ) {
Console.WriteLine("{0} -> {1}", g.Key, string.Join(",", g.Select(o => o.ToString())));
}
假设你反对'ToString()
输出对你有用的东西。