Pregunta

Tengo el siguiente código de 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?
Se presentó una vez he añadido la cláusula "orderby" a la consulta, antes de que compila bien, así que tengo una especie de presentimiento de lo que está pasando, pero no puedo poner mi dedo en él.

¿Fue útil?

Solución

Trate declarar posts específicamente como IQueryable<Post> en lugar de var (que recoger el IOrderedQueryable<Post> (seguirá siendo ser ordenada).

Alternativamente, re-estructura que así que la orden en el extremo, lo que nos permite (opcionalmente) traer en 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, nos fijamos en finalQuery)

La razón de que se erroring es que actualmente tiene (esencialmente):

IOrderedQueryable<Post> posts = {snip};
...
posts = {something (Where) that returns IQueryable<Post>}

Otros consejos

El resultado de las expressionis lambda de tipo IQueryable. No se permite el método de extensión Cuando, por lo que usarlo primero hay que convertir esto en, por ejemplo, una lista.

Usted puede hacer esto utilizando

posts = posts.ToList().Where(p => p.PostStatus.Id != 90);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top