У меня есть сценарий, в котором я должен был сначала группировать, а затем сортировать каждую группу. Я придумал следующий рабочий запрос:LINQ GroupBy then OrderBy Behavior
applicants = context.Applicants
.OrderBy(app => app.Id).Skip((pageNumber - 1)*defaultPageSize)
.Take(defaultPageSize)
.GroupBy(app => app.PassportNumber)
.Select(g => g.OrderBy(d => d.IsEndorseChild)).ToList()
.SelectMany(grouping => grouping)
.ToList();
Но это не работает:
applicants = context.Applicants
.OrderBy(app => app.Id).Skip((pageNumber - 1)*defaultPageSize)
.Take(defaultPageSize)
.GroupBy(app => app.PassportNumber)
.Select(g => g.OrderBy(d => d.IsEndorseChild))
.SelectMany(grouping => grouping)
.ToList();
Первый запрос выдает результат (это идентификатор претендентов возвращается), как:
7, 10, 8, 2, 9, 6, 5, 3, 4, 1
но второй запрос производит:
7, 10, 8, 2, 9, 6, 3, 4, 5, 1
Я не уверен, почему это происходит, и w hat - разница между запросами.
Что именно я здесь не хватает?
EDIT: Пример входного и Ожидаемый результат:
Applicant 1 => ID : 1
IsEndorsed : 0
Passport : ABC123
Applicant 2 => ID : 2
IsEndorsed : 1
Passport : ABC123
Applicant 3 => ID : 3
IsEndorsed : 0
Passport : ABC1234
Applicant 4 => ID : 4
IsEndorsed : 0
Passport : A1234
Applicant 5 => ID : 5
IsEndorsed : 1
Passport : PQR123
Applicant 6 => ID : 6
IsEndorsed : 1
Passport : PQR123
Applicant 7 => ID : 7
IsEndorsed : 0
Passport : PQR123
Expected output : (Grp by Passport Number and in each group IsEndorsed = 0 is at top)
----------------------------------------------
Applicant 1 => ID : 1
IsEndorsed : 0
Passport : ABC123
Applicant 2 => ID : 2
IsEndorsed : 1
Passport : ABC123
Applicant 3 => ID : 3
IsEndorsed : 0
Passport : ABC1234
Applicant 4 => ID : 4
IsEndorsed : 0
Passport : AX1234
Applicant 7 => ID : 7
IsEndorsed : 0
Passport : PQR123
Applicant 5 => ID : 5
IsEndorsed : 1
Passport : PQR123
Applicant 6 => ID : 6
IsEndorsed : 1
Passport : PQR123
Можете ли вы добавить некоторые примеры данных и каков ожидаемый результат? – Vlad274
@ Влад274: См. Редактирование –