Richiesta LINQ in ordine decrescente


439

Sono sicuro che sarà relativamente semplice.

Ho una query LINQ che desidero ordinare entro la data di creazione più recente.

Vedere:

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

Ho anche provato:

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

ma questo dà un errore:

Nessun sovraccarico per il metodo 'OrderByDescending' accetta 0 argomenti

Da quello che ho letto, sono abbastanza sicuro che il primo modo in cui l'ho fatto dovrebbe funzionare. Ho provato a cambiare discendente in crescente solo per vedere se fa qualcosa ma rimane lo stesso.

Le sarei grato se qualcuno potesse dare un'occhiata alla domanda e vedere se sto facendo qualcosa di sbagliato. Grazie :)

Risposte:


674

Devi scegliere una Proprietà per ordinarla e passarla come espressione lambda OrderByDescending

piace:

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

Davvero, anche se la prima versione dell'istruzione LINQ dovrebbe funzionare. In t.Delivery.SubmissionDaterealtà è popolato con date valide?


2
Ciao optus, grazie per la tua risposta. Ho capito quale fosse il problema. Stavo usando un elenco impaginato, e in realtà stava facendo l'ordinamento da quella classe di supporto. Contrassegnerò la tua risposta come corretta una volta
scaduto

175

Penso che questo sia fallito perché stai ordinando un valore nullo. Se Delivery è una tabella associata a chiave esterna, è necessario includere prima questa tabella, esempio di seguito:

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;
mrosiak,

29

Penso che il secondo dovrebbe essere

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

Penso che sia corretto nei suoi confronti, avevo scritto la query in modo errato quando l'avevo postato (es. Lasciando nella seconda ultima riga di ordine) e probabilmente ha appena copiato e incollato per dimostrare l'uso di Lambda OrderByDescending.
109221793,

6

Solo per mostrarlo in un formato diverso che preferisco usare per qualche motivo: il primo modo restituisce il tuo itemList come System.Linq.IOrderedQueryable

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

L'approccio va bene, ma se lo volevi direttamente in un oggetto elenco:

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

Tutto quello che devi fare è aggiungere una chiamata .ToList () alla fine della query.

Qualcosa da notare, dalla parte superiore della mia testa non riesco a ricordare se l'espressione! (Non) è accettabile nella chiamata Where ().

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.