J'ai le code LINQ suivant:Impossible de convertir IQueryable <> à l'erreur IOrderedQueryable
var posts = (from p in db.Posts
.Include("Site")
.Include("PostStatus")
where p.Public == false
orderby p.PublicationTime
select p);
if (!chkShowIgnored.Checked) {
posts = posts.Where(p => p.PostStatus.Id != 90);
}
Cette dernière ligne (supplémentaire où) me donne l'erreur:
Impossible de convertir implicitement système de type ». Linq.IQueryable 'to' System.Linq.IOrderedQueryable '.
Je ne suis pas sûr de ce que cela signifie ...
Pourquoi ai-je cette erreur?
Il est apparu une fois que j'ai ajouté la clause "orderby" à la requête, avant qu'elle ne soit bien compilée, donc j'ai une sorte de pressentiment de ce qui se passe, mais je ne peux pas vraiment y mettre le doigt.
Les deux ont fonctionné comme un charme, merci! Que voulez-vous dire que nous commandons à la fin plutôt que dans le milieu? Le SQL réel n'est-il pas généré et exécuté après tout ceci, une fois la requête énumérée? Je suppose que LINQ serait assez intelligent pour "combiner" les WHERE ... –
C'est OrderBy qui change la signature ... en faisant le OrderBy la dernière chose que nous appliquons, nous avons 'IQueryable' partout, ce qui est plus facile composer. Comme vous le dites, le fournisseur (EF, LINQ-to-SQL, etc) va tout fusionner avant de l'exécuter quand même. –
Aaaaah, cette dernière explication est SUPER clair, gotcha. Je vous remercie!! –