Я делаю работу по следующему код. Этот вопрос касается оригинального открытого исходного кода, а не текущей работы.
Контекст — это разбитый на страницы список из базы данных, где вам необходимо получить как страницу элементов, так и общее количество элементов в вашей базе данных.
Первоначальные авторы сделали это:
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, чего мы и ожидаем от структуры разбивки на страницы.
Есть ли у вас основания полагать, что в этом контексте необходимо проводить различие? Я считаю, что если можно удалить безопасно.
Я не буду спрашивать авторов, потому что заметил, что проект не привлекает большого внимания их собственных сопровождающих.
![Нужно ли различать IEnumerable и IQueryable для целей Count и ToList? [closed] TheFAQ.ru](https://thefaq.ru/wp-content/uploads/2023/01/logo-250.png)