简单的Retrieve Post
方法代码。
我正在排序记录并基于pagesize(记录数)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条记录,我们再次滚动这次页面大小= 2, 现在它将再次复制第3篇bcoz以前它只在移动屏幕上,新添加的4将附加3如下所示 -
最终输出 -
4
3
3
2
1
我想避免这种情况。
一个解决方案是可以检查移动应用程序端的重复帖子,在方法GetPost中有什么好的方法来处理api端吗?
答案 0 :(得分:1)
您的GetPost方法应将最后一个帖子ID作为参数。
当您加载所有尚未使用.AddRange()方法显示的帖子时。
只有在您拥有所有帖子后,才会根据页面大小将其分段为页面。