Как получить индекс строки по ключу объекта в динамически построенном запросе с использованием Entity Framework

В сетке мне нужно перейти к записи по ее идентификатору. Вот почему мне нужно найти его индекс в наборе, отфильтрованном пользователем и отсортированном пользователем.

Я работаю с LINQ to Entities. Запрос строится динамически на основе пользовательского ввода.

Таблица содержит слишком много (более 10^5) записей, поэтому следующее предложение о переполнении стекане годится:

Recs = Recs.Where( /* Filters */ );
Recs = Recs.OrderBy( /* Sort criteria */ );
Recs.AsEnumerable()
        .Select((x,index) => new {RowNumber = index, Record = x})
        .Where(x=>x.Record.ID = 35);

Поскольку LINQ to Entities не поддерживает Select( (entity, index) => ...), потребуется загрузить 250 000 записей с сервера SQL, чтобы я мог решить показать 25 000 страниц.

В настоящее время моя самая многообещающая идея состоит в том, чтобы преобразовать каждый критерий сортировки в фильтр. Таким образом, поиск индекса человека, отсортированного по возрастанию роста, станет подсчетом более низких людей (критерий сортировки «рост по возрастанию» => фильтр «рост меньше, чем» + подсчет).

Как мне подойти к этому? Эта проблема уже решена? Есть ли какая-нибудь библиотека для .NET, которая поможет мне хотя бы на полпути?

6
задан Community 23 May 2017 в 11:54
поделиться