Ho il seguente codice LINQ:Impossibile convertire IQueryable <> per errore 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);
}
L'ultima riga (l'extra dove) mi sta dando l'errore:
Impossibile convertire implicitamente il tipo di sistema '. Linq.IQueryable 'to' System.Linq.IOrderedQueryable '.
Non sono sicuro di cosa significhi ...
Perché visualizzo questo errore?
E 'apparso una volta che ho aggiunto la clausola "orderby" alla query, prima che fosse compilata correttamente, quindi ho una specie di intuizione su cosa sta succedendo, ma non riesco a metterci un dito.
Entrambi hanno funzionato come un incantesimo, grazie! Cosa intendi ordinando alla fine piuttosto che nel mezzo? Non è il vero SQL generato ed eseguito dopo tutto questo, una volta che la query viene enumerata? Ho pensato che LINQ sarebbe stato abbastanza intelligente da "combinare" il DOVE ... –
È l'OrderBy che cambia la firma ... rendendo l'OrderBy l'ultima cosa che applichiamo, abbiamo 'IQueryable' dappertutto, che è più facile comporre. Come dici tu, il provider (EF, LINQ-to-SQL ecc.) Unirà tutto prima di eseguirlo comunque. –
Aaaaah, quella spiegazione finale è SUPER chiara, gotcha. Grazie!! –