首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

LINQ 排序有关问题 3Q

2013-08-16 
LINQ 排序问题 3Q表一 发帖表 groupPostsID TITLE CONTENT AddTime1AAAAAA2013-6-28 09:002BBBBBB2013-6-2

LINQ 排序问题 3Q
表一 发帖表 groupPosts
ID TITLE CONTENT AddTime
1   AAA   AAA     2013-6-28 09:00
2   BBB   BBB     2013-6-28 14:00
3   CCC   CCC     2013-6-28 10:00
4   DDD   DDD     2013-6-28 12:00
5   EEE   EEE     2013-6-28 13:00

表二 回复表 Comments
ID   TargetID  CONTENT   ADDTIME
1       1         AAA      2013-6-28 11:00
2       1         AAA      2013-6-28 10:00
3       2         BBB      2013-6-28 14:00
4       3         CCC      2013-6-28 10:00
5       1         AAA      2013-6-28 09:00
6       4         DDD      2013-6-28 12:00
7       3         CCC      2013-6-28 13:00



先按照Comments表 ADDTIME 最新时间(1个帖子对应MAX ADDTIME就可以了)排序,再按照groupPosts表 AddTime进行排序 该怎么查询呢
查询结果:
发帖表 groupPosts
ID TITLE CONTENT
2   BBB   BBB
3   CCC   CCC
4   DDD   DDD
1   AAA   AAA
5   EEE   EEE 

请指点下 谢谢 现在写的LINQ是这样的 但是结果不对
 var query =
                        from p in
                            context.groupPosts
                        join c in
                            context.Comments.GroupBy(x => x.TargetID)


                                   .Select(g => new { TargetID = g.Key, ADDTIME = g.Max(y => y.AddTime) })
                            on p.ID equals c.TargetID into leftGroup
                        from c in leftGroup.DefaultIfEmpty()
                        orderby c.ADDTIME descending, p.AddTime descending
                        select p; LINQ
[解决办法]
你既然使用了left join,就应该知道,有的时候,Comments表里是没有数据的:

var query =
                        from p in
                            context.groupPosts
                        join c in
                            context.Comments.GroupBy(x => x.TargetID)
                                   .Select(g => new { TargetID = g.Key, ADDTIME = g.Max(y => y.AddTime) })
                            on p.ID equals c.TargetID into leftGroup


                        from c in leftGroup.DefaultIfEmpty()
                        orderby c==null?DateTime.MinValue:c.ADDTIME descending, p.AddTime descending
                        select p;

热点排行