Я делаю работу по следующему код. Этот вопрос касается оригинального открытого исходного кода, а не текущей работы.
Контекст — это разбитый на страницы список из базы данных, где вам необходимо получить как страницу элементов, так и общее количество элементов в вашей базе данных.
Первоначальные авторы сделали это:
if (source is IQueryable<T> querable)
{
PageIndex = pageIndex;
PageSize = pageSize;
IndexFrom = indexFrom;
TotalCount = querable.Count();
TotalPages = (int)Math.Ceiling(TotalCount / (double)PageSize);
Items = querable.Skip((PageIndex - IndexFrom) * PageSize).Take(PageSize).ToList();
}
else
{
PageIndex = pageIndex;
PageSize = pageSize;
IndexFrom = indexFrom;
TotalCount = source.Count();
TotalPages = (int)Math.Ceiling(TotalCount / (double)PageSize);
Items = source.Skip((PageIndex - IndexFrom) * PageSize).Take(PageSize).ToList();
}
Две ветви вычисляют общее количество и частичный список элементов, используя один и тот же код, за исключением того, что в одной из ветвей source
параметр — это EF Core IQueryable
в то время как в остальных случаях он рассматривается как любой другой IEnumerable
, который хорошо работает с фреймворком mocking или в целом при разбиении на страницы из списков, хранящихся в памяти.
Хотел бы спросить, нужно ли. Насколько мне известно, EF IQueryable
, который расширяет IEnumerable
, переопределит Count
метод путем выдачи SQL SELECT COUNT
query, чего мы и ожидаем от структуры разбивки на страницы.
Есть ли у вас основания полагать, что в этом контексте необходимо проводить различие? Я считаю, что если можно удалить безопасно.
Я не буду спрашивать авторов, потому что заметил, что проект не привлекает большого внимания их собственных сопровождающих.