我有一个IGrouping类型的对象,希望在不更改对象类型的情况下对组中的元素进行排序。
换句话说,我已经
var tmp = group.OrderBy(x => x);
group
的类型为IGrouping<int, someanonymousclass>
,我希望tmp
的类型也为IGrouping<int, someanonymousclass>
。
一种解决方法是将其更改为Dictionary或新的匿名类,但我希望tmp的类型为IGrouping<int, someanonymousclass>
。
换句话说就是:我想对我的IGrouping<int, someanonymousclass>
对象的元素进行排序。如果我使用OrderBy
,它会将group
的类型更改为IOrderedEnumerable
,并且我无法再访问group.Key
。我如何保持group
的类型?
范例:
var states = SimulationPanel.innerPanel.Children.OfType<StateBar>().Where(x => x.isSensorState())
.GroupBy(x => (SensorElement)x.BauplanElement,
x => new
{
Start = (decimal)(x.Margin.Left / SimulationPanel.Zoom),
Width = (decimal)(x.Width / SimulationPanel.Zoom),
State = x.State
});
var group = states.First();
var tmp = group.OrderBy(x => x.Start);
var key = tmp.Key; //This does not work, because tmp is not of type IGrouping
我知道我可以在分组前使用OrderBy
。但我不想这样做。
1条答案
按热度按时间3phpmpom1#
如果你可以的话,就把订单提前一点,例如:
(Or将
Select
放在OrderBy
之前,使GroupBy
更简单。)如果确实需要这样做,可以编写自己的
IGrouping<TKey, TElement>
实现和一个扩展方法来对元素进行排序并将它们保留在列表中: