Let's assume a list of objects with two properties - int Val1 and double Val2. I want to group it by Val1, and then order within groups by Val2.
Example list:
Val1 Val2
1 2.4
2 1.3
1 1.9
2 5.1
Properly grouped and ordered list would look like:
Val1 Val2
1 1.9
1 2.4
2 1.3
2 5.1
The first thing that comes to my mind is using LINQ.
list = list.GroupBy(x => x.Val1).SelectMany(x => x).OrderBy(x => x.Val2).ToList();
But results are not correct - OrderBy entirely overrides GroupBy.
Approach with different order of methods almost works:
list = list.OrderBy(x => x.Val2).GroupBy(x => x.Val1).SelectMany(x => x).ToList();
But Val1 are reversed - go from higher to lower value, while Val2 is ordered correctly. Can't just reverse list, since it would reverse Val2.
CodePudding user response:
I want to group it by Val1, and then order within groups by Val2.
I think you want something else: you want to order the list by Val1 and then by Val2:
list = list
.OrderBy(x => x.Val1)
.ThenBy(x => x.Val2)
.ToList();
It doesn't make sense to create groups and then flatten them if all you want is ordering.
