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;