编程语言
首页 > 编程语言> > c#-具有2个表并采用/跳过的最新记录

c#-具有2个表并采用/跳过的最新记录

作者:互联网

我要做的基本上是这个问题所提供的:SQL Server – How to display most recent records based on dates in two tables ..唯一的区别是:我正在使用Linq到sql.

我要表:

>作业
>论坛帖子

这些不是很相似,但是它们都有一个“ LastUpdated”字段.我想获取最新的加入记录.但是,我还需要获取/跳过功能进行分页(不,我没有SQL 2012).

我不想创建包含所有记录的新列表(使用ToList和AddRange),所以我知道整个记录集,然后再进行排序..这似乎效率极低.

我的尝试:

请不要嘲笑我的效率低下的代码.好吧,一点点(因为效率低下和……当跳过大于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();

        }
    }

对SQl人士来说,任何很棒的Linq,谁能给我提示?我相信有人可以加入其中!

解决方法:

首先,您应该使用OrderByDescending,因为较晚的日期具有比较早的日期更大的值,以便获取最新的更新.其次,我认为您的工作将对第一页有效,但您也只需从合并列表中获取最重要的值.也就是说,如果您要合并两个表中的最后20个条目,从每个表中获取最后20个条目,合并它们,然后从合并列表中获取最后20个条目.当您尝试使用分页时会出现问题,因为您需要做的是知道每个列表中有多少个元素组成了前几页.我认为,最好的选择是先将它们合并,然后再使用“跳过/接听”.我知道您不想听,但是其他解决方案可能更复杂.或者,您可以从每个表中获取最上面的跳过量值,然后合并,跳过跳过的值并应用获取量.

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;
}

标签:join,linq,sql-server-2008,sql,c
来源: https://codeday.me/bug/20191031/1974982.html