Wie handle paging IQueryable mit Linq To Entities? (problem mit OrderBy -)
Ich bin derzeit am erstellen einer einfachen ASP.NET MVC-Website mithilfe von Linq to Entities. Mein Erster Ausflug in diese Welt war nerd Abendessen, das ist, wo ich fand die paginierte Liste code, den ich bin versucht zu verwenden. 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, ich bin mit dem entity framework und der obige code löst die folgende Fehlermeldung:
Die Methode "Skip" ist nur für die unterstützten sorted input in LINQ to Entities. Die Methode 'OrderBy' muss aufgerufen werden, bevor die Methode "Überspringen".
Nicht wissen, die ins und outs der Linq, ich bin mir nicht sicher, wie Sie Sie hinzufügen in einer orderby-Klausel, wenn ich nicht weiß, was die Spaltennamen werden in der oben beschriebenen Methode, was ist generic.
Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, Ihre beste Wette ist, gehen, um sicherzustellen, dass Ihre Anfragen vor einer Bestellung vor übergabe an den
PaginatedList
.Zuerst würde ich empfehlen dringend die Verwendung der freien PagedList code, anstatt zu schreiben Ihre eigenen, wie es berücksichtigt viele Dinge, die Sie würde schließlich entdecken Sie auf eigene Faust, und hat in der Nähe keinerlei Nachteil.
Ihre Frage zu beantworten, sollten Sie Sortieren Sie Ihre Liste vor der übergabe an die paging-Funktion. Wenn Sie brauchen, um dies zu tun, die dynamisch sind, können Sie verwenden Sie den Microsoft DynamicQuery Bibliothek. Aber im Allgemeinen, der aufrufende code wird wissen, wie man die Liste Sortieren.
Könnten Sie ändern den Konstruktor Unterschrift zu verlangen,
IOrderedQueryable<T>
argument, eher alsIQueryable<T>
. Der aufrufende code wäre dann verantwortlich für die Abwicklung der Bestellung.Können Sie immer fügen Sie einen weiteren parameter der Methode, damit der Anrufer zu definieren, die OrderBy-Klausel:
The type or namespace name 'TKey' could not be found (are you missing a using directive or an assembly reference?)
Fehler