512 Stimmen

LINQ Orderby-Abfrage absteigend

Ich habe eine LINQ-Abfrage, die ich nach dem zuletzt erstellten Datum ordnen möchte.

Ich habe es versucht:

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

Ich habe es auch versucht:

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

Dies führt jedoch zu einer Fehlermeldung:

No overload for method 'OrderByDescending' takes 0 arguments

Nach dem, was ich gelesen habe, sollte es auf die erste Weise funktionieren. Ich habe versucht, die descending a ascending nur um zu sehen, ob es etwas bewirkt, aber es bleibt dasselbe.

Was mache ich falsch?

765voto

Adam Price Punkte 9807

Sie müssen eine Eigenschaft auswählen, nach der sortiert werden soll, und diese als Lambda-Ausdruck an OrderByDescending

mögen:

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

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

211voto

mrosiak Punkte 2397

Ich denke, diese erste fehlgeschlagen, weil Sie Wert bestellen, die null ist. Wenn Lieferung ist ein Fremdschlüssel zugeordnete Tabelle dann sollten Sie diese Tabelle zuerst, Beispiel unten einschließen:

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

33voto

Jonathan Punkte 11561

Ich denke, die zweite sollte lauten

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

13voto

nulltron Punkte 607

Nur um es in einem anderen Format zu zeigen, 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 es direkt in eine Liste Objekt wollte:

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

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

Etwas zu beachten, aus der Spitze von meinem Kopf kann ich mich nicht erinnern, wenn die !(not) Ausdruck ist akzeptabel in der Where() aufrufen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X