我有一个Action模型与Session导航属性,
考虑这段代码:
var x=db.Actions.OrderBy(p => p.Session.Number).ThenBy(p => p.Date);//it's OK
x 是一个有序的 Action,但是当在 x 上分组时,组不会在 x 上迭代(基于动作.会话) 手动处理有序枚举:
var y=x.GroupBy(p=>p.Session).ToArray()
y 有一组(Key,IGrouping)会话,但为什么是 group.Key未订购基于会话号?
如何按编号到达一组会话并按日期排序每个组?
因为它是Enumerable.GroupBy http://msdn.microsoft.com/en-us/library/bb534501.aspx维持秩序。没有这样的承诺Queryable.GroupBy http://msdn.microsoft.com/en-us/library/bb534492.aspx。
从前者的文档来看:
IGrouping(Of TKey, TElement) 对象按以下顺序生成
产生每个元素的第一个键的源中元素的顺序
IGrouping(TKey, TElement)。分组中的元素按顺序生成
它们出现在源代码中。
你说的是后者,上面没有提到。称呼OrderBy
after GroupBy
使其发挥作用。
Update:由于您显然希望不仅仅对 GroupBy 键进行排序,因此您应该能够使用另一个 GroupBy 重载来指定要对每个会话的操作列表进行排序:
db.Actions.GroupBy(
p => p.Session,
(session, actions) => new {
Session = session,
Actions = actions.OrderBy(p => p.Date)
}).OrderBy(p => p.Session.Number).ToArray();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)