Нужно ли различать IEnumerable и IQueryable для целей Count и ToList? [closed]

Я делаю работу по следующему код. Этот вопрос касается оригинального открытого исходного кода, а не текущей работы.

Контекст — это разбитый на страницы список из базы данных, где вам необходимо получить как страницу элементов, так и общее количество элементов в вашей базе данных.

Первоначальные авторы сделали это:

        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, чего мы и ожидаем от структуры разбивки на страницы.

Есть ли у вас основания полагать, что в этом контексте необходимо проводить различие? Я считаю, что если можно удалить безопасно.

Я не буду спрашивать авторов, потому что заметил, что проект не привлекает большого внимания их собственных сопровождающих.

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *