Как получить порядковый номер строки, используя Entity Framework? - PullRequest
1 голос
/ 25 октября 2011

У меня SQL-запрос:

WITH OrderedRecs AS
(select ROW_NUMBER() OVER(ORDER BY RecID) as seqNumber,* from Records where RecordGroupID=7)
SELECT * FROM OrderedRecs where RecordID=35

Как получить тот же результат, используя структуру сущностей?

Ответы [ 2 ]

1 голос
/ 25 октября 2011

Чистое решение LINQ будет:

records.Where(rec => rec.RecordGroupID == 7)
    .OrderBy(rec => rec.RecId).AsEnumerable()
    .Select((rec, i) => new { i, rec })
    .Where(anon => anon.i == 35)
    .Select(anon => anon.rec).First()

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

Edit:

После ваших комментариев: Вероятно, что-то вроде:

IEnumerable<SortedRecord> GetSortedRecords(IQueryable<Record> records
    , Func<SortedRecord, bool> sortedRecordPredicate)
{
    return
      records.Where(rec => rec.RecordGroupID == 7)
        .OrderBy(rec => rec.RecId).AsEnumerable()
        .Select((rec, i) => new SortedRecord{ Sequence = i, Record = rec })
        .Where(sortedRecordPredicate);
}

var result = GetSortedRecords(records, rec => rec.Record.RecordID = 35);

Где SortedRecord, очевидно, теперь является типом, который позволяет вам вводить все виды условий. (синтаксис не проверен).

Совершенно другой подход заключается в представлении запроса в предложении WITH.

0 голосов
/ 25 октября 2011

Не могли бы вы добавить SeqNumber как производный (или дискриминаторный) столбец к базовому объекту? См. Предыдущий пример . Вы должны были бы назначить это самостоятельно.

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