LINQ Orderby Descending Query

439

Ich bin sicher, dass dies relativ einfach sein wird.

Ich habe eine LINQ-Abfrage, die ich bis zum zuletzt erstellten Datum bestellen möchte.

Sehen:

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

Ich habe auch versucht:

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

aber das gibt einen Fehler:

Keine Überladung für die Methode 'OrderByDescending' erfordert 0 Argumente

Nach dem, was ich gelesen habe, bin ich mir ziemlich sicher, dass der erste Weg, den ich gemacht habe, funktionieren sollte. Ich habe versucht, absteigend in aufsteigend zu wechseln, um zu sehen, ob es etwas bewirkt, aber es bleibt gleich.

Ich wäre dankbar, wenn jemand einen Blick auf die Abfrage werfen und sehen könnte, ob ich etwas falsch mache. Vielen Dank :)

109221793
quelle

Antworten:

674

Sie müssen eine Eigenschaft zum Sortieren auswählen und als Lambda-Ausdruck an übergeben OrderByDescending

mögen:

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

Wirklich, obwohl die erste Version Ihrer LINQ-Anweisung funktionieren sollte. Ist t.Delivery.SubmissionDatetatsächlich mit gültigen Daten gefüllt?

Adam Price
quelle
2
Hallo optus, danke für deine antwort. Ich habe herausgefunden, was das Problem war. Ich habe eine paginierte Liste verwendet und sie hat tatsächlich die Bestellung von dieser Hilfsklasse ausgeführt. Ich werde Ihre Antwort als richtig markieren, sobald das Zeitlimit abgelaufen ist :)
abgelaufen 109221793
175

Ich denke, dies ist zuerst fehlgeschlagen, weil Sie einen Wert bestellen, der null ist. Wenn Delivery eine mit einem Fremdschlüssel verknüpfte Tabelle ist, sollten Sie diese Tabelle zuerst einschließen, Beispiel unten:

var itemList = from t in ctn.Items.Include(x=>x.Delivery)
                    where !t.Items && t.DeliverySelection
                    orderby t.Delivery.SubmissionDate descending
                    select t;
mrosiak
quelle
include entspricht DataLoadOptions dlo = new DataLoadOptions (); dlo.LoadWith <Items> (i => i.Delivery); ctn.LoadOptions = dlo;
Mrosiak
29

Ich denke der zweite sollte sein

var itemList = (from t in ctn.Items
                where !t.Items && t.DeliverySelection
                select t).OrderByDescending(c => c.Delivery.SubmissionDate);
Jonathan
quelle
Ich denke, um fair zu ihm zu sein, ich hatte die Abfrage beim Posten falsch eingegeben (dh in der vorletzten Orderby-Zeile belassen) und er hat sie wahrscheinlich nur kopiert und eingefügt, um die Verwendung des Lambda OrderByDescending zu demonstrieren.
109221793
6

Nur um es in einem anderen Format anzuzeigen, das ich aus irgendeinem Grund lieber verwende: Der erste Weg gibt Ihre itemList als System.Linq.IOrderedQueryable zurück

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

Dieser Ansatz ist in Ordnung, aber wenn Sie ihn direkt in ein Listenobjekt einfügen möchten:

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

Sie müssen lediglich einen Aufruf von .ToList () an das Ende der Abfrage anhängen.

Ich kann mich nicht erinnern, ob der Ausdruck! (Nicht) im Aufruf von Where () akzeptabel ist.

nulltron
quelle