最近的记录有 2 个表并采取/跳过
本文关键字:跳过 记录 最近 | 更新日期: 2023-09-27 17:56:22
我想做的,基本上是这个问题提供的内容:SQL Server - 如何根据两个表中的日期显示最新记录。唯一的区别是:我正在使用Linq to sql。
我必须表:
- 作业
- 论坛帖子
它们不是很相似,但它们都有一个"上次更新"字段。我想获取最近加入的记录。但是,我还需要一个用于分页的获取/跳过功能(不,我没有 SQL 2012)。
我不想创建一个包含我所有记录的新列表(使用 ToList 和 AddRange),所以我知道整组记录,然后排序。这似乎效率极低。
我的尝试:
请不要嘲笑我的低效代码。好吧,有点(既因为它效率低下,而且......当 skip 大于 0 时,它不会做我想要的)。
public List<TempContentPlaceholder> LatestReplies(int take, int skip)
{
using (GKDBDataContext db = new GKDBDataContext())
{
var forumPosts = db.dbForumPosts.OrderBy(c => c.LastUpdated).Skip(skip).Take(take).ToList();
var assignMents = db.dbUploadedAssignments.OrderBy(c => c.LastUpdated).Skip(skip).Take(take).ToList();
List<TempContentPlaceholder> fps =
forumPosts.Select(
c =>
new TempContentPlaceholder()
{
Id = c.PostId,
LastUpdated = c.LastUpdated,
Type = ContentShowingType.ForumPost
}).ToList();
List<TempContentPlaceholder> asm =
assignMents.Select(
c =>
new TempContentPlaceholder()
{
Id = c.UploadAssignmentId,
LastUpdated = c.LastUpdated,
Type = ContentShowingType.ForumPost
}).ToList();
fps.AddRange(asm);
return fps.OrderBy(c=>c.LastUpdated).ToList();
}
}
任何很棒的Linq对SQl的人,谁能给我一个提示?我相信有人可以加入他们的行列!
首先,您应该使用 OrderByDescending
,因为较晚的日期比较早的日期具有更大的值,以便获取最新的更新。 其次,我认为您正在做的事情对于第一页是有效的,但您只需要从联接列表中获取前 take
个值。 也就是说,如果您希望合并两个表中的最后 20 个条目,请从每个表中获取最后 20 个条目,合并它们,然后从合并列表中获取最后 20 个条目。 当您尝试使用分页时,问题就出现了,因为您需要做的是知道每个列表中有多少元素组成了以前的页面。 我认为,您最好的选择可能是先合并它们,然后使用跳过/采取。 我知道你不想听到这个,但其他解决方案可能更复杂。 或者,您可以从每个表中获取前 skip+take
个值,然后合并、跳过skip
值并应用 take
。
using (GKDBDataContext db = new GKDBDataContext())
{
var fps = db.dbForumPosts.Select(c => new TempContentPlaceholder()
{
Id = c.PostId,
LastUpdated = c.LastUpdated,
Type = ContentShowingType.ForumPost
})
.Concat( db.dbUploadedAssignments.Select(c => new TempContentPlaceholder()
{
Id = c.PostId,
LastUpdated = c.LastUpdated,
Type = ContentShowingType.ForumPost
}))
.OrderByDescending( c => c.LastUpdated )
.Skip(skip)
.Take(take)
.ToList();
return fps;
}