Wie gehe ich mit IQueryable mit Linq To Entities um? (Problem mit OrderBy)

entity-framework generics iqueryable

Frage

Ich baue gerade eine einfache ASP.NET MVC-Site mit Linq to Entities auf. Mein erster Streifzug durch diese Welt war ein Nerd-Dinner, bei dem ich den paginierten Listencode fand, den ich zu verwenden versuche. Der Code sieht wie folgt aus:

public class PaginatedList<T> : List<T>
{

    public int PageIndex { get; private set; }
    public int PageSize { get; private set; }
    public int TotalCount { get; private set; }
    public int TotalPages { get; private set; }

    public PaginatedList(IQueryable<T> source, int pageIndex, int pageSize)
    {
        PageIndex = pageIndex;
        PageSize = pageSize;
        TotalCount = source.Count();
        TotalPages = (int)Math.Ceiling(TotalCount / (double)PageSize);

        this.AddRange(source.Skip(PageIndex * PageSize).Take(PageSize));
    }

    public bool HasPreviousPage
    {
        get
        {
            return (PageIndex > 0);
        }
    }

    public bool HasNextPage
    {
        get
        {
            return (PageIndex + 1 < TotalPages);
        }
    }
}

Das Problem ist, dass ich das Entity Framework verwende und der obige Code den folgenden Fehler ausgibt:

Die Methode 'Skip' wird nur für sortierte Eingaben in LINQ to Entities unterstützt. Die Methode 'OrderBy' muss vor der Methode 'Skip' aufgerufen werden.

Ich kenne die Besonderheiten von Linq nicht und weiß nicht, wie ich eine orderby-Klausel hinzufügen soll, wenn ich nicht weiß, wie die Spaltennamen in der obigen Methode aussehen werden und was generisch ist.

Vielen Dank!

Akzeptierte Antwort

Ich denke, Ihre beste Wette wird es sein, sicherzustellen, dass Ihre Anfragen eine Bestellung haben, bevor Sie sie an die PaginatedList .


Beliebte Antwort

Erstens würde ich dringend empfehlen, den kostenlosen PagedList- Code zu verwenden, anstatt Ihren eigenen Code zu schreiben, da er viele Dinge berücksichtigt, die Sie letztendlich selbst entdecken müssten, und fast keinen Nachteil hat.

Um Ihre Frage zu beantworten, sollten Sie Ihre Liste sortieren, bevor Sie sie an die Paging-Funktion übergeben. Wenn Sie dies dynamisch tun müssen, können Sie die Microsoft DynamicQuery- Bibliothek verwenden. Im Allgemeinen weiß der aufrufende Code jedoch, wie die Liste sortiert wird.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum