Frage

Nehmen wir an, ich habe eine Liste mit 100 Elementen.Ist es möglich, eine CAML-Abfrage zu schreiben, um 5 Elemente zu erhalten, aber 10 Elemente von Anfang an zu überspringen?So etwas wie LIMIT und OFFSET in SQL?

War es hilfreich?

Lösung

Leider funktioniert SharePoint-Paging ein bisschen anders als das Limit- und Offset in SQL. Um paginierte Elemente zu erhalten, müssen Sie ID des ersten Elements für die gewünschte Seite angeben und dann RowLimit einstellen, und wenn Sie die Sortierung für die Liste definiert haben, müssen Sie auch Sortiersäulennamen und -werte dieser Spalten für den ersten Punkt angeben auf Ihrer Seite.

Sie können sehen, wie es funktioniert, wenn Sie zu einer beliebigen Liste gehen, die über ausreichende Elemente verfügt und versuchen, Seiten durchzusetzen, und sehen Sie, wie sich die Abfragezeichenfolge der Seite ändert. Dann löschen Sie einige Elemente und versuchen Sie es erneut. Ändern Sie dann die Reihenfolge der Artikel und versuchen Sie es erneut ...

Alle diese Parameter, die Sie in ListItemCollectionPositionseigenschaft des sprätischen Objekts übergeben müssen.

Mehr über Paging in SharePoint:

http:// www. DirectSharePoint.com/2011/03/Step-By-Breps-Tep-GUIDE-NO-implement-Paging.html

In Ihrem speziellen Fall können Sie die Dinge ein bisschen vereinfachen, wenn Sie keine Filterung und Sortierung haben:

    .
  1. Wählen Sie First 11 IDs aus der Liste aus
  2. Verwenden Sie die 11. ID, um die richtige ListItemCollectionPosition für Ihr Sprätes zu erstellen
  3. Rubrimit des sprätischen Objekts auf 5 einstellen

    Um schnell Top 11-IDs auszusetzen, verwenden Sie diese Anfrage: generasacodicetagpre.

Andere Tipps

Zu überspringen n Elemente ist nicht möglich, aber Sie können eine Seitenabfrage durchführen, das heißt, Sie können eine festlegen RowLimit mit einem Order und begrenzen Sie die Ergebniselemente.Das Ergebnis hat eine ListItemCollectionPosition Eigenschaftensatz, der definiert, wo die nächste Seite beginnt.

Hier haben Sie ein C#-CSOM-Beispiel:

int page = 2; // the desired page

string viewXml = $@"<View>
                        <Query>
                            <Where><Eq><FieldRef Name='FieldToFilter'/><Value Type='TypeOfField'>TheValue</Value></Eq></Where>
                        </Query>
                        <RowLimit>10</RowLimit> // Rowlimit is needed for paging, in your case to skip 10
                        <OrderBy>
                            <FieldRef Name='FieldToOrder' /> // In paged queries is advised to set an order
                        </OrderBy>
                    </View>";

using (ClientContext context = new ClientContext(YourUrl))
{
    CamlQuery camlQuery = new CamlQuery
    {
        ViewXml = viewXml
    };
    List list = context.Web.Lists.GetById(ListGuid);
    ListItemCollection items = null;
    while (page > 0)
    {
        items = list.GetItems(camlQuery);

        context.Load(items);
        context.ExecuteQuery();

        camlQuery.ListItemCollectionPosition = items.ListItemCollectionPosition;
        page--;
    }

    items.ToList();
}

Diese Abfrage gibt Element 11-20 zurück.
Ich habe es nicht in Javascript getestet, bin mir aber sicher, dass es auch funktioniert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top