LINQ又没人 发过来看看 EF查询问题 3Q

xiekai12342010 2013-08-12 02:00:26
表一 发帖表 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;
...全文
123 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiekai12342010 2013-08-14
  • 打赏
  • 举报
回复
3Q 版主大大
q107770540 2013-08-13
  • 打赏
  • 举报
回复
这是我用的测试数据:
INSERT  [dbo].[groupPosts] SELECT 1,'AAA','AAA','2013-6-28 09:00'  
INSERT  [dbo].[groupPosts] SELECT 2,'BBB','BBB','2013-6-28 14:00'   
INSERT  [dbo].[groupPosts] SELECT 3,'CCC','CCC','2013-6-28 10:00' 
INSERT  [dbo].[groupPosts] SELECT 4,'DDD','DDD','2013-6-28 12:00'  
INSERT  [dbo].[groupPosts] SELECT 5,'EEE','EEE','2013-6-28 13:00' 


INSERT Comments SELECT 1,1,'AAA','2013-6-28 11:00' 
INSERT Comments SELECT 2,1,'AAA','2013-6-28 10:00' 
INSERT Comments SELECT 3,2,'BBB','2013-6-28 14:00' 
INSERT Comments SELECT 4,3,'CCC','2013-6-28 10:00' 
INSERT Comments SELECT 5,1,'AAA','2013-6-28 09:00' 
INSERT Comments SELECT 6,4,'DDD','2013-6-28 12:00' 
INSERT Comments SELECT 7,3,'CCC','2013-6-28 13:00' 
q107770540 2013-08-13
  • 打赏
  • 举报
回复
						from p in this.GroupPosts
						join c in 	this.Comments 
							on p.ID equals c.TargetID into  Group
						let com=Group.OrderByDescending(x=>x.ADDTIME).FirstOrDefault()
						orderby com.ADDTIME descending, p.AddTime descending
						select p
这样测试成功,得到了你帖子中想要的结果: ID TITLE CONTENT 2 BBB BBB 3 CCC CCC 4 DDD DDD 1 AAA AAA 5 EEE EEE 这是LINQ语句生成的SQL语句:
SELECT [t0].[ID], [t0].[TITLE], [t0].[CONTENT], [t0].[AddTime]
FROM [groupPosts] AS [t0]
ORDER BY (
    SELECT [t2].[ADDTIME]
    FROM (
        SELECT TOP (1) [t1].[ADDTIME]
        FROM [Comments] AS [t1]
        WHERE ([t0].[ID]) = [t1].[TargetID]
        ORDER BY [t1].[ADDTIME] DESC
        ) AS [t2]
    ) DESC, [t0].[AddTime] DESC
xiekai12342010 2013-08-12
  • 打赏
  • 举报
回复
能确定Comments表里是有数据的 发帖的时候就加入了一条数据
q107770540 2013-08-12
  • 打赏
  • 举报
回复
你既然使用了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;

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧