这可能是一个很小的忽略注意的问题:
myColl.OrderByDescending(item => item.myCollItemCreationDate)
.GroupBy(item => new { item.Id, item.ItemType, item.ChannelName })
.Select(res => new ChannelRowUi(res.ToList())
{
ChannelName = res.Key.ChannelName,
ItemType = res.Key.ItemType.ToString()
});但后来我意识到我错了,因为分组打乱了顺序。
我更改为:
myColl.GroupBy(item => new { item.Id, item.ItemType, item.ChannelName })
.Select(res => new ChannelRowUi(res.ToList())
{
ChannelName = res.Key.ChannelName,
ItemType = res.Key.ItemType.ToString()
})
.OrderByDescending(item => item.myCollItemCreationDate);但是我仍然得到了最终的结果,没有按创建日期排序。
知道我做错了什么吗?
发布于 2012-04-16 15:11:51
我认为您应该更改select和OrderBy的顺序。记住,这是一个函数链,下一个函数总是对链中前一个函数的结果进行操作。当您拥有最后的orderBy时,您将对选择的结果进行排序。在select中,您正在构造新的ChannelRowUi对象,这些对象可能都具有相同的CreationDate,不能肯定,因为您还没有展示ChannelRowUi构造函数。
发布于 2012-04-16 15:01:39
myColl
.GroupBy(item => new { item.Id, item.ItemType, item.ChannelName })
.OrderByDescending(item => item.CreationDate)
.ToList()
.Select(res =>
new ChannelRowUi(res.ToList())
{
ChannelName = res.Key.ChannelName,
ItemType = res.Key.ItemType.ToString()
})发布于 2012-04-16 15:01:00
我不认为你应该调用ToList命令
另外,请尽量避免使用ToList。
如果你有大数据--使用ToList是错误的。
您应该使用延迟执行
首先,您需要执行orderby,然后选择。
https://stackoverflow.com/questions/10169846
复制相似问题