LINQ Orderby по убыванию запроса - PullRequest
399 голосов
/ 17 марта 2011

Я уверен, что это будет относительно просто.

У меня есть запрос 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 аргументов

Из того, что я прочитал, я уверен, что первый способ сделать это должен сработать.Я пытался изменить нисходящий на восходящий, чтобы посмотреть, что он делает, но он остается прежним.

Буду благодарен, если кто-нибудь посмотрит на запрос и посмотрит, что я делаю что-то не так.Спасибо:)

Ответы [ 4 ]

623 голосов
/ 17 марта 2011

Вам нужно выбрать свойство для сортировки и передать его как лямбда-выражение в OrderByDescending

как:

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

Действительно, хотя первая версия вашего оператора LINQ должна работать. t.Delivery.SubmissionDate заполнен действительными датами?

159 голосов
/ 18 июня 2014

Я думаю, что сначала это не удалось, потому что вы заказываете нулевое значение. Если Delivery является таблицей, связанной с внешним ключом, то вам следует сначала включить эту таблицу, например ниже:

var itemList = from t in ctn.Items.Include(x=>x.Delivery)
                    where !t.Items && t.DeliverySelection
                    orderby t.Delivery.SubmissionDate descending
                    select t;
26 голосов
/ 17 марта 2011

Я думаю, что второе должно быть

var itemList = (from t in ctn.Items
                where !t.Items && t.DeliverySelection
                select t).OrderByDescending(c => c.Delivery.SubmissionDate);
2 голосов
/ 18 мая 2018

Просто чтобы показать его в другом формате, который я по какой-то причине предпочитаю использовать: Первый способ возвращает ваш 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 () в конец запроса.

Что-то заметить, не могу вспомнить, допустимо ли выражение! (Not) в вызове Where ().

...