Ich habe folgende LINQ-Code:Kann nicht IQueryable <> zu IOrderedQueryable Fehler konvertieren
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);
}
Das letzte Zeile (das extra wo) wird mir den Fehler geben:
Kann Typ ‚System nicht implizit konvertieren. Linq.IQueryable 'zu' System.Linq.IOrderedQueryable '.
Ich bin mir nicht sicher, was das bedeutet ...
Warum erhalte ich diesen Fehler?
Es erschien, sobald ich die "Orderby" -Klausel zu der Abfrage hinzugefügt, bevor es kompiliert, so habe ich eine Art Ahnung von dem, was vor sich geht, aber ich kann nicht ganz meinen Finger hinein.
Beide funktionierten wie ein Zauber, danke! Was meinst du, wir bestellen am Ende und nicht in der Mitte? Wird das eigentliche SQL nach all dem generiert und ausgeführt, sobald die Abfrage aufgelistet ist? Ich nahm an, LINQ wäre schlau genug, um die WHEREs zu "kombinieren" ... –
Es ist die OrderBy, die die Signatur ändert ... indem wir die OrderBy zur letzten Sache machen, haben wir 'IQueryable' überall, was einfacher ist komponieren. Wie Sie sagen, wird der Provider (EF, LINQ-to-SQL usw.) alles zusammenführen, bevor es trotzdem ausgeführt wird. –
Aaaaah, diese letzte Erklärung ist SUPER klar, Gotcha. Vielen Dank!! –