c# - 使用 linq Skip 和 Take 显示记录时如何避免重复输入

标签 c# mysql linq linq-to-sql

其简单的Retrieve Post方法代码。 我正在对记录进行排序,并根据页面大小(记录数)跳过并获取下一条记录

 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 条最新记录记录)

现在按降序显示记录 -

3
2
1

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

最终输出 -

4
3
3
2
1

I want to avoid such scenario.

one solution is can check for repeated posts on mobile application side , is there any good way to handle at api side in method GetPost?

is there any better and good way to maintain/avoid such scenario? enter image description here

最佳答案

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

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

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

关于c# - 使用 linq Skip 和 Take 显示记录时如何避免重复输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44248851/

相关文章:

c# - 如何使用 linq 从表中获取有限的行

c# - WCF服务将数据集与数据类作为返回类型

c# - 如何最好地与类中的多个方法共享 IDisposable 对象(如 SqlConnection)?

c# - 另一个“为此有设计模式吗?”

php - 需要帮助在 PHP 中从 SQL 连接多个表

vb.net - 为什么我不能在VB中投影ToString()?

c# - InvokeOnMainThread 不适用于 `method group`

mysql - 根据 ID 将一个表的单列合并到另一个表中

php - 无法从选定的重复 ID (PHP) 和 (MySQL) 中获取总和值

c# - 对从 Linq 查询访问私有(private)变量感到困惑