日期:2014-05-20  浏览次数:20964 次

OrderBy之后再GroupBy导致被重新排序的问题

db.t_News.OrderByDescending(q => q.ID).Take(400).GroupBy(q => q.Tags)

本来以为结果是按照ID的倒序排列,结果
GroupBy之后,key会自动按照自己的一套从小到大重新排序
应该怎么破?。。

目的是取出最后400条数据,根据tags分组之后,按照分组里面的最大ID值来排序key出现的顺序。
Groupby排序

------解决方案--------------------
var list = db.t_News.OrderByDescending(q => q.ID).ToList();
var query = list.Take(400).GroupBy(q => q.Tags);
将OrderBy的结果固定下来。
------解决方案--------------------
理论上来讲,当执行到 db.t_News.OrderByDescending(q => q.ID).Take(400)  Take()这后,数据就已经加载到内存里了

引用:
按照分组里面的最大ID值来排序key出现的顺序。


我不是很明白楼主的意图,比如有这样的数据:
ID   Tag
100  A
110  B
120  A
130  B


你想最终显示的效果是什么样?

结果1:
ID   Tag
130  B
110  B
120  A
100  A


结果2:
ID   Tag
130  B
120  A
110  B
100  A

------解决方案--------------------
结果1: 

db.t_News.OrderByDescending(q => q.ID).Take(400).GroupBy(q => q.Tags).OrderByDescending(g=>g.Max(x=>x.ID);


结果2:
db.t_News.OrderByDescending(q => q.ID).Take(400);