Impossible de convertir IQueryable <> à l'erreur IOrderedQueryable
-
20-09-2019 - |
Question
J'ai le code LINQ suivant:
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 le type 'System.Linq.IQueryable' à 'System.Linq.IOrderedQueryable'.
Je ne sais pas ce que cela signifie ...
Pourquoi suis-je recevoir cette erreur?
Il est apparu une fois que j'ajouté la clause « orderby » à la requête, avant que compilé fin, donc je sorte de pressentiment de ce qui se passe, mais je ne peux pas tout à fait mettre mon doigt dedans.
La solution
Essayez de déclarer posts
spécifiquement comme IQueryable<Post>
plutôt que var
(qui décrochez le IOrderedQueryable<Post>
(il sera toujours est ordonnée).
Vous pouvez également re structure afin que nous commander à la fin, ce qui nous permet de (le cas échéant) mettre en where
au milieu:
var posts = from p in db.Posts
.Include("Site")
.Include("PostStatus")
where p.Public == false
select p);
if (!chkShowIgnored.Checked) {
posts = posts.Where(p => p.PostStatus.Id != 90);
}
var finalQuery = posts.OrderBy(p => p.PublicationTime);
(évidemment, nous regardons finalQuery
)
La raison pour laquelle il est erroring est que vous avez actuellement (essentiellement):
IOrderedQueryable<Post> posts = {snip};
...
posts = {something (Where) that returns IQueryable<Post>}
Autres conseils
Le résultat des lambda expressionis de type IQueryable. Il ne permet à la méthode d'extension Lorsque, de façon à l'utiliser d'abord vous devez convertir en, par exemple, une liste.
Vous pouvez le faire en utilisant
posts = posts.ToList().Where(p => p.PostStatus.Id != 90);