Ich habe eine Abfrage:IEnumerable vs IQueryable
topics.OrderBy(x => x.Replies.Any() ? x.Replies.OrderBy(y => y.PostedDate).Last().PostedDate : x.PostedDate);
Es sortiert die Sammlung Themen von letzter Antwort, oder wenn es keine Antwort hat dann durch sein eigenes Postdatum. Es funktioniert gut und macht seine Arbeit gut. Es funktioniert jedoch nur, wenn Themen vom Typ IEnumerable<Topic>
sind. Wenn ich versuche, es "IQueryable" zu machen, erhalte ich einen Fehler, der besagt, dass die Erweiterungsmethode Last() unbekannt ist oder etwas zu diesem Zweck.
Wer weiß warum? Aus irgendeinem Grund erhalten x.Replies.Last()
innerhalb dieser Abfrage, während Themen IQueryable diese Ausnahme auslöst.
Ich möchte, dass Themen IQQueryable sein, weil ich zuerst Themen mit allen Themen aus der Datenbank laden, sortiert nach letzter Antwort. Ich mache dann .Skip() und .Take() auf Themen für Paging. Zur Zeit werden jedoch ALLE Themen in den Speicher gezogen und dann die .Skip() und .Take() für die In-Memory-Sammlung ausgeführt. Das ist inakzeptabel, denn je mehr Themen dem Forum hinzugefügt werden, desto länger dauert das Laden der Site, insbesondere wenn die Datenbank nicht auf demselben Computer wie die Website ausgeführt wird. Ich brauche die Datenbank nur die ausgelagerten Zeilen, nicht alle Zeilen. Ich möchte, dass das Paging auf Datenbankebene erfolgt.
Irgendwelche Ideen?
PS - Ich bin mit LINQ to Entities mit Entity Framework 4.0
Das war genau das, was ich brauchte. Es wurde schön in einen Speicherausdruck übersetzt, der mit IQueryable verwendet und an EF für Abfragen auf niedriger Ebene gesendet wird. Woo hoo! – Chev