LINQ ".Include" порядок в подзапросе

У меня есть следующий код объекта, который возвращает всех пользователей и "включает" все их примеры запросов:

    var userQuery = from u in _IntranetContext.UserSet.Include("SampleRequests")
                           orderby u.LastName ascending
                           select u;

У каждого пользователя есть несколько SampleRequests. Каждый запрос SampleRequest имеет идентификатор # (только целое число: 1, 22, 341 и т. Д.). Приведенный выше LINQ для сущностей захватывает пользователей и их SampleRequests следующим образом:

Пользователь1: 33, 22, 341, 12

Пользователь2: 24, 3, 981

Как вы видите, SampleRequest ID# не в порядке возрастания. Я хотел бы, чтобы результаты были в порядке.

Как установить ограничение порядка выполнения для идентификатора включенного SampleRequests #

Обратите внимание: SampleRequestId является свойством SampleRequest... не является свойством объекта User

3 ответа

Решение

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

var userQuery = from u in _IntranetContext.UserSet.Include("SampleRequests")
                orderby u.LastName ascending
                select new
                {
                    User = u,
                    SampleRequests = u.SampleRequests.OrderByDescending(r => r.SampleRequestId)
                };

Это вызовет проблемы, если вы захотите вернуть этот тип, так как он анонимный.

Вы также можете выбрать это в новый пользовательский объект, подобный этому:

var userQuery = from u in _IntranetContext.UserSet.Include("SampleRequests")
                orderby u.LastName ascending
                select new User
                {
                    Property1 = u.Property1,
                    Property2 = u.Property2,
                    Property3 = u.Property3,
                    SampleRequests = u.SampleRequests.OrderByDescending(r => r.SampleRequestId).ToList()
                };

Это вернет коллекцию объектов User, но обновление объектов в базе данных может вызвать проблемы.

Просто добавьте еще один параметр для заказа:

var userQuery = from u in _IntranetContext.UserSet.Include("SampleRequests")
                           orderby u.LastName ascending, 
                                   u.SampleRequestId descending
                           select u;

Редактировать: Treed на <15 секунд.

var userQuery = from u in _IntranetContext.UserSet.Include("SampleRequests")
                orderby u.LastName ascending, u.SampleRequestId descending
                select u;
Другие вопросы по тегам