Pedido LINQ por consulta descendente


439

Tenho certeza de que será relativamente simples.

Eu tenho uma consulta LINQ que desejo solicitar até a data criada mais recentemente.

Vejo:

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

Eu também tentei:

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

mas isso dá um erro:

Nenhuma sobrecarga para o método 'OrderByDescending' leva 0 argumentos

Pelo que li, tenho certeza de que a primeira maneira que fiz deve funcionar. Tentei mudar de descendente para ascendente apenas para ver se ele faz alguma coisa, mas permanece o mesmo.

Ficaria agradecido se alguém pudesse dar uma olhada na consulta e ver se estou fazendo algo errado. Obrigado :)

Respostas:


674

Você precisa escolher uma propriedade para classificar e passá-la como uma expressão lambda para OrderByDescending

gostar:

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

Realmente, embora a primeira versão da sua instrução LINQ deva funcionar. t.Delivery.SubmissionDateNa verdade, é preenchido com datas válidas?


2
Olá optus, obrigado pela sua resposta. Eu descobri qual era o problema. Eu estava usando uma paginatedList e, na verdade, estava fazendo o pedido dessa classe auxiliar.
Marcarei

175

Eu acho que isso falhou primeiro porque você está solicitando um valor que é nulo. Se Entrega é uma tabela associada a chave estrangeira, você deve incluir esta tabela primeiro, exemplo abaixo:

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

include é equivalente a DataLoadOptions dlo = new DataLoadOptions (); dlo.LoadWith <Items> (i => i.Delivery); ctn.LoadOptions = dlo;
21815 mrosiak # 1652

29

Eu acho que o segundo deveria ser

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

Eu acho que para ser justo com ele, digitei a consulta incorretamente quando postei (ou seja, saindo na segunda última linha de pedido) e ele provavelmente apenas copiou e colou para demonstrar o uso do lambda OrderByDescending.
109221793

6

Apenas para mostrá-lo em um formato diferente que prefiro usar por algum motivo: A primeira maneira retorna seu itemList como um System.Linq.IOrderedQueryable

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

Essa abordagem é boa, mas se você a quisesse diretamente em um Objeto de Lista:

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

Tudo o que você precisa fazer é anexar uma chamada .ToList () ao final da consulta.

Algo a ser observado, não me lembro se a expressão! (Not) é aceitável na chamada Where ().

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.