62,074
社区成员
发帖
与我相关
我的任务
分享
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'
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
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;