Commande LINQ par requête décroissante

Je suis sûr que ce sera relativement simple.

J’ai une requête LINQ que je veux commander en fonction de 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 arguments

D’après ce que j’ai lu, je suis à peu près sûr que la première façon de procéder a fonctionné. J’ai essayé de changer en descendant pour monter juste pour voir si cela fait quelque chose mais ça rest le même.

Je serais reconnaissant si quelqu’un pouvait regarder la requête et voir si je faisais quelque chose de mal. Merci 🙂

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

comme:

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

Vraiment, bien que la première version de votre déclaration LINQ devrait fonctionner. Est-ce que t.Delivery.SubmissionDate réellement des dates valides?

Je pense que cela a d’abord échoué parce que vous commandez une valeur qui est nulle. Si Delivery est une table associée à une clé étrangère, vous devez d’abord inclure cette table, 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; 

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); 

Juste pour le montrer dans un format différent que je préfère utiliser pour une raison quelconque: la première méthode 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 est bien, mais si vous le vouliez directement dans un object 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’append un appel à .ToList () à la fin de la requête.

Quelque chose à noter, je ne me souviens plus si l’expression! (Non) est acceptable dans l’appel Where ().