Frage

Ich habe folgenden LINQ-Code:

    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) ist mir die Fehlermeldung geben:

Kann nicht implizit konvertiert Typ 'System.Linq.IQueryable' auf 'System.Linq.IOrderedQueryable'.

Ich bin mir nicht sicher, was das bedeutet ...
Warum erhalte ich diesen Fehler?
Es zeigte sich, sobald ich die „orderby“ -Klausel der Abfrage hinzugefügt, vor, dass es in Ordnung zusammengestellt, so dass ich ein bisschen eine Ahnung davon haben, was los ist, aber ich kann nicht ganz meine Finger hineingesteckt.

War es hilfreich?

Lösung

Versuchen posts speziell als IQueryable<Post> erklärt anstatt var (die die IOrderedQueryable<Post> abholen (es wird noch werden zu bestellen).

Alternativ umstrukturieren es so dass wir am Ende zu bestellen, so dass wir (optional) bringt in der where in der Mitte:

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);

(natürlich schauen wir auf finalQuery)

Der Grund, es ist erroring ist, dass zur Zeit Sie haben (im Wesentlichen):

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

Andere Tipps

Das Ergebnis der Lambda expressionis vom Typ IQueryable. Es ist nicht erlaubt, die Erweiterungsmethode Wo, so dass es zu verwenden, müssen Sie zunächst diese konvertieren, zum Beispiel einer Liste.

könnten Sie tun dies mit

posts = posts.ToList().Where(p => p.PostStatus.Id != 90);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top