【问题标题】:How to avoid duplicate entry when display records using linq skip and take使用linq skip and take显示记录时如何避免重复输入
【发布时间】:2017-05-29 18:50:03
【问题描述】:

其简单的Retrieve Post 方法代码。 我正在根据页面大小(记录数)Skip and Take next records 对记录进行排序。

 public IEnumerable<TEntity> GetPost(Expression<Func<TEntity, bool>> filter = null, int? page = 0, int? pageSize = null, params SortExpression<TEntity>[] sortExpressions)
    {
        //Filter the query set
        IQueryable<TEntity> query = DbSet;

        if (filter != null)
        {
            query = query.Where(filter);
            if (query.Count() < 1)
            {
                throw new Exception();
            }
        }
        // sort the filtered query result
        if (sortExpressions != null)
        {
            IOrderedQueryable<TEntity> orderedQuery = null;
            for (var i = 0; i < sortExpressions.Count(); i++)
            {
                if (i == 0)
                {
                    if (sortExpressions[i].SortDirection == ListSortDirection.Ascending)
                    {
                        orderedQuery = query.OrderBy(sortExpressions[i].SortBy);
                    }
                    else
                    {
                        orderedQuery = query.OrderByDescending(sortExpressions[i].SortBy);
                    }
                }
                else
                {
                    if (sortExpressions[i].SortDirection == ListSortDirection.Ascending)
                    {
                        orderedQuery = orderedQuery.ThenBy(sortExpressions[i].SortBy);
                    }
                    else
                    {
                        orderedQuery = orderedQuery.ThenByDescending(sortExpressions[i].SortBy);
                    }

                }
            }
            // skip rows according to page number and page size
            if (page != null)
            {
                query = orderedQuery.Skip(((int)page - 1) * (int)pageSize);
            }
        }

        if (pageSize != null)
        {
            query = query.Take((int)pageSize);
        }

        return query.ToList();
    }

问题是我以DESC 的顺序将记录显示到移动应用程序中,以便最近的帖子排在最前面。

例如 - 记录集是

1
2
3

pagesize is =2(意味着当我滚动时一页只能显示 2 条记录,它将再次点击 GetPost 方法跳过前 2 条记录并获取下 2 条最新记录)

现在以 desc 顺序显示记录 -

3
2
1

现在如果添加了新的第 4 条记录,我们现在再次滚动 pagesize =2, 现在它将再次复制帖子 3,因为之前它仅在移动屏幕上,新添加的 4 将附加到下面的 3 -

最终输出 -

4
3
3
2
1

我想避免这种情况。

一个解决方案是可以检查移动应用程序端的重复帖子,在方法GetPost的api端有什么好的方法来处理吗?

有没有更好更好的方法来维护/避免这种情况?

【问题讨论】:

    标签: c# mysql linq linq-to-sql


    【解决方案1】:

    您的 GetPost 方法应将最后一个帖子 ID 作为参数。

    当您使用 .AddRange() 方法加载所有尚未显示的帖子时。

    只有在你拥有所有帖子之后,它们才能根据页面大小分成页面。

    【讨论】:

    • 分页中添加范围的任何示例?
    • 可能是这样的 - for (var page = 1; page &lt;= Math.ceil(items / itemsOnPage); page++) { //page = current page }
    猜你喜欢
    • 2013-11-25
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多