Как получить индекс строки по ключу сущности в динамически построенном запросе с использованием Entity Framework - PullRequest
6 голосов
/ 22 марта 2012

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

Я работаю с 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 , которая позволила бы мне пройти даже половину пути?

1 Ответ

2 голосов
/ 22 марта 2012

Вот рекурсивная функция, которую вы можете вызвать, чтобы выяснить номер строки.Если ваши записи в базе данных часто меняются, это, вероятно, не сработает, так как это вызывает базу данных несколько раз, сужая поиск в два раза.1005 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...