web-dev-qa-db-fra.com

LINQ Orderby Descending Query

Je suis sûr que ce sera relativement simple.

J'ai une requête LINQ que je souhaite commander à la date de création la plus récente.

Voir:

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

J'ai aussi essayé:

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

mais cela donne une erreur:

Pas de surcharge pour la méthode 'OrderByDescending' prend 0 argument

D'après ce que j'ai lu, je suis à peu près sûr que la première façon de procéder devrait fonctionner. J'ai essayé de passer de descendant à croissant juste pour voir si ça fait quelque chose mais ça reste pareil. 

Je serais reconnaissant si quelqu'un pouvait examiner la question et voir si je fais quelque chose de mal. Merci :)

387
109221793

Vous devez choisir une propriété à trier et la transmettre en tant qu’expression lambda à OrderByDescending

comme:

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

Vraiment, la première version de votre déclaration LINQ devrait fonctionner. Est-ce que t.Delivery.SubmissionDate est rempli avec les dates valides? 

599
Adam Price

Je pense que cette première a échoué parce que vous commandez la valeur qui est nulle. Si Delivery est une table associée à une clé étrangère, vous devez d'abord l'inclure, exemple ci-dessous:

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

Je pense que le second devrait être

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

Juste pour le montrer dans un format différent que je préfère utiliser pour une raison quelconque: La première façon renvoie votre itemList en tant que System.Linq.IOrderedQueryable

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

Cette approche convient, mais si vous le vouliez directement dans un objet de liste:

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

Tout ce que vous avez à faire est d’ajouter un appel .ToList () à la fin de la requête.

Quelque chose à noter, de mémoire, je ne me souviens pas si l'expression! (Not) est acceptable dans l'appel Where (). 

0
NullReff