LINQ ".Include" порядок в подзапросе - PullRequest
8 голосов
/ 21 июля 2009

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

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

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

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

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

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

Как наложить ограничение orderby на ИД включенного SampleRequests #

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

Ответы [ 3 ]

8 голосов
/ 21 июля 2009

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

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, но обновление объектов в базе данных может вызвать проблемы.

0 голосов
/ 21 июля 2009

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

var userQuery = from u in _IntranetContext.UserSet.Include("SampleRequests")
                orderby u.LastName ascending, u.SampleRequestId descending
                select u;
0 голосов
/ 21 июля 2009

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

var userQuery = from u in _IntranetContext.UserSet.Include("SampleRequests")
                           orderby u.LastName ascending, 
                                   u.SampleRequestId descending
                           select u;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...