Замовлення LINQ за низхідним запитом


439

Я впевнений, що це буде відносно просто.

У мене є запит LINQ, який я хочу замовити за останньою створеною датою.

Подивитися:

        var itemList = from t in ctn.Items
                        where !t.Items && t.DeliverySelection
                        orderby t.Delivery.SubmissionDate descending
                        select t;

Я також спробував:

       var itemList = (from t in ctn.Items
                        where !t.Items && t.DeliverySelection
                        select t).OrderByDescending();

але це дає помилку:

Жодне перевантаження для методу "OrderByDescending" не бере 0 аргументів

З того, що я прочитав, я цілком впевнений, що перший спосіб, коли я це зробив, повинен працювати. Я намагався змінити низхідний на висхідний, щоб побачити, чи це щось робить, але він залишається таким же.

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

Відповіді:


674

Вам потрібно вибрати властивість, щоб сортувати за ним і передавати його як лямбда-вираз OrderByDescending

подібно до:

.OrderByDescending(x => x.Delivery.SubmissionDate);

Дійсно, хоча перша версія вашого оператора LINQ повинна працювати. Чи t.Delivery.SubmissionDateнасправді заселено дійсними датами?


2
Привіт optus, дякую за вашу відповідь. Я зрозумів, в чому проблема. Я використовував paginatedList, і він фактично робив замовлення з цього класу помічників. Я
позначу

175

Я думаю, що це спочатку не вдалося, оскільки ви замовляєте значення, яке є нульовим. Якщо Доставка - це таблиця, пов’язана з іноземним ключем, то слід спочатку включити цю таблицю, наприклад нижче:

var itemList = from t in ctn.Items.Include(x=>x.Delivery)
                    where !t.Items && t.DeliverySelection
                    orderby t.Delivery.SubmissionDate descending
                    select t;

включити еквівалентно DataLoadOptions dlo = нові DataLoadOptions (); dlo.LoadWith <Items> (i => i.Delivery); ctn.LoadOptions = dlo;
mrosiak

29

Я думаю, другий повинен бути

var itemList = (from t in ctn.Items
                where !t.Items && t.DeliverySelection
                select t).OrderByDescending(c => c.Delivery.SubmissionDate);

Я вважаю справедливим до нього, коли я розмістив запит неправильно, коли я розміщував (тобто, залишаючи другий останній рядок порядку замовлення), і він, ймовірно, просто скопіював і вставив, щоб продемонструвати використання лямбда OrderByDescending.
109221793

6

Просто, щоб показати його в іншому форматі, який я вважаю за краще використовувати чомусь: Перший спосіб повертає ваш itemList як System.Linq.IOrderedQueryable

using(var context = new ItemEntities())
{
    var itemList = context.Items.Where(x => !x.Items && x.DeliverySelection)
                                .OrderByDescending(x => x.Delivery.SubmissionDate);
}

Такий підхід чудовий, але якщо ви хотіли, щоб він потрапив прямо до списку об'єктів:

var itemList = context.Items.Where(x => !x.Items && x.DeliverySelection)
                                .OrderByDescending(x => x.Delivery.SubmissionDate).ToList();

Все, що вам потрібно зробити, - це додати виклик .ToList () до кінця запиту.

Щось зауважимо, вгорі голови я не можу згадати, чи є вираз! (Не) прийнятним у виклику Where ().

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.