Tengo el siguiente código de LINQ:no puede convertir IQueryable <> a un error 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);
}
Esa última línea (el extra donde) me da el error:
No se puede convertir implícitamente el tipo de sistema'. Linq.IQueryable 'to' System.Linq.IOrderedQueryable '.
No estoy seguro de lo que esto significa ...
¿Por qué me sale 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.
Ambos funcionaron como un encanto, ¡gracias! ¿A qué te refieres con que ordenamos al final en vez de en el medio? ¿No se genera y se ejecuta el SQL real después de todo esto, una vez que se enumera la consulta? Supuse que LINQ sería lo suficientemente inteligente como para "combinar" los WHEREs ... –
Es el OrderBy el que cambia la firma ... al hacer el OrderBy lo último que aplicamos, tenemos 'IQueryable' en todo momento, lo cual es más fácil Para componer. Como dices, el proveedor (EF, LINQ-to-SQL, etc.) fusionará todo antes de ejecutarlo de todos modos. –
Aaaaah, esa explicación final es SUPER clara, gotcha. ¡¡Gracias!! –