c# - No se puede convertir IQueryable<> a IOrderedQueryable error
linq-to-sql type-conversion (2)
El resultado de lambda expressionis de tipo IQueryable. No permite el método de extensión Dónde, así que para usarlo primero debe convertirlo a, por ejemplo, una lista.
Puedes hacer esto usando
posts = posts.ToList().Where(p => p.PostStatus.Id != 90);
Tengo el siguiente código LINQ:
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);
}
Esa última línea (el extra donde) me está dando el error:
No se puede convertir implícitamente el tipo ''System.Linq.IQueryable'' a ''System.Linq.IOrderedQueryable''.
No estoy seguro de lo que esto significa ...
¿Por qué recibo este error?
Apareció una vez que agregué la cláusula "orderby" a la consulta, antes de que se compilara bien, así que tengo una corazonada de lo que está sucediendo, pero no puedo poner mi dedo en ello.
Intente declarar las posts
específicamente como IQueryable<Post>
lugar de var
(que recogerá IOrderedQueryable<Post>
(aún se ordenará).
Alternativamente, vuelva a estructurarlo para que lo ordenemos al final, lo que nos permite (opcionalmente) traer el where
en el medio:
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);
(Obviamente, miramos finalQuery
)
La razón por la que está cometiendo errores es que actualmente tiene (esencialmente):
IOrderedQueryable<Post> posts = {snip};
...
posts = {something (Where) that returns IQueryable<Post>}