【发布时间】:2019-01-04 07:08:44
【问题描述】:
我有以下 PaginatedList 类。
public class PaginatedList<T> : List<T>
{
public int PageIndex { get; }
public int TotalRecords { get; }
public int TotalPages { get; }
public PaginatedList(IEnumerable<T> items, int totalRecords, int pageIndex, int pageSize)
{
PageIndex = pageIndex;
TotalRecords = totalRecords;
TotalPages = (int)Math.Ceiling(TotalRecords / (double)pageSize);
AddRange(items);
}
public bool HasPreviousPage => PageIndex > 1;
public bool HasNextPage => PageIndex < TotalPages;
public static async Task<PaginatedList<T>> CreateAsync(
IQueryable<T> source, int pageIndex, int pageSize)
{
var count = await source.CountAsync();
var items = await source.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync();
return new PaginatedList<T>(items, count, pageIndex, pageSize);
}
}
我正在使用这个类来获取使用 EF 检索的实体列表的分页信息。
这就是我如何使用这个类返回带有分页信息的用户列表。
var users = await PaginatedList<User>.CreateAsync(userQuery, pageIndex, pageSize);
以上调用将返回PaginatedList<User> 对象。
如果我有该实体的 DTO 类,我们称它为 UserDto。如何使用 automapper 将 PaginatedList<User> 转换为 PaginatedList<UserDto> 以便结果将包含所有 userDto 对象以及分页信息?
否则,是否有另一种/更好的方法来实现类似的目标?
【问题讨论】:
-
从
List<T>派生是一个非常糟糕的选择。我强烈推荐阅读Is-A Versus Has-A。 -
@ErikPhilips 谢谢你的建议,我去看看
-
@ErikPhilips 为什么得出一个错误的选择?我认为 PaginatedList 是一个列表,但具有附加属性。
-
@user3049658 Why not inherit from List<T>。在这个问题的实现中,
PageIndex的属性不是 什么是列表也不是分页列表。PageIndex是 State 的属性,而不是 List 的属性。
标签: c# automapper