c# linq-to-sql type-conversion iqueryable iorderedqueryable

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>}