it-roy-ru.com

LINQ Orderby по убыванию запроса

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

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

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

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

387
109221793

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

лайк:

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

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

599
Adam Price

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

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

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

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

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

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

Этот подход хорош, но если вы хотите его прямо в List Object:

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

Все, что вам нужно сделать, это добавить вызов .ToList () в конец запроса.

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

0
NullReff