その簡単なRetrieve Post
メソッドコード。 私はレコードをソートしており、ページサイズ(レコード数)に基づいてSkip and Take next records
です。linq skipを使用してレコードを表示するときに重複する項目を避ける方法
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
GetPost
方法をヒットするスクロールしないとき1ページのみ2レコードを表示できることを意味します)
今DESC順にレコードを表示 - 新しい第四レコードが追加した場合
今3
2
1
とAg AIN我々は以前にそれが唯一の携帯電話の画面上があり、新しく追加された4は、その3
below-のような最終的な出力が追加されますbcoz再び、 は、今では再びポスト3を複製します今、この時点ページサイズ= 2をスクロール -
4
3
3
2
1
このような状況は避けたいです。
1つの解決策は、モバイルアプリケーション側で繰り返し投稿を確認できます。メソッドGetPostのAPI側で処理する方法はありますか?
ページングのaddrangeのサンプル例はありますか? – Neo
多分これは次のようなものです - 'for(var page = 1; page <= Math.ceil(items/itemsOnPage); page ++){ // page =現在のページ }' – Zoner