Safari Books Online is a digital library providing on-demand subscription access to thousands of learning resources.
Der Skip-Operator überspringt die ersten n Elemente einer Sequenz und liefert die restlichen zurück. Sollen mehr Elemente übersprungen werden, als sich in der Sequenz befinden oder ist die geforderte Anzahl negativ, so wird eine leere Auflistung zurückgeliefert.
Dieser Operator muss zwingend mit einer Sortierung (OrderBy-Operator) eingesetzt werden, da es sonst zur Laufzeit zu einem Fehler kommt.
In Kombination mit dem Take-Operator ist auf elegante und performante Weise ein so genanntes Paging realisierbar, das eine definierte Anzahl von Elementen überspringt und eine ebenfalls definierte Anzahl von Elementen maximal zurückliefert.
C#
Das folgende Bespiel überspringt 10 Kunden und liefert dann 20 zurück – vorausgesetzt, es existieren so viele. Ist dies nicht der Fall, so werden entsprechend weniger geliefert. Im Gegensatz zu VB.NET kennt C# den Take-Operator nur in der Methodensyntax, sodass die LINQ-Abfrage geklammert werden muss.
// Objektkontext erstellen
TonisTortenTraumEntities TonisTortenTraumContext = new TonisTortenTraumEntities();
// Die Kunden 11 bis 30 sortiert nach deren Namen
var kunden = (from k in TonisTortenTraumContext.Kunden orderby k.Name select k).Take(20).Skip(10);
// Ausgabe
foreach (var k in kunden)
Debug.WriteLine(k.Name);
Listing 4.69 Der Skip-Operator (C#)
Das Ergebnis besteht aus den Kunden an den Positionen 11 bis 30 – sortiert nach deren Namen und unter der Voraussetzung, dass auch genügend viele existieren.
VB.NET
Das folgende Bespiel überspringt 10 Kunden und liefert dann 20 zurück – vorausgesetzt, es existieren so viele. Ist dies nicht der Fall, so werden entsprechend weniger geliefert. Im Gegensatz zu C# kennt VB.NET den Take-Operator auch in der LINQ-Syntax.
' Objektkontext erstellen Dim TonisTortenTraumContext As New TonisTortenTraumEntities() ' Die Kunden 11 bis 30 sortiert nach deren Namen Dim Kunden = From k In TonisTortenTraumContext.Kunden Take 20 Skip 10 Order By k.Name ' Alternativ möglich, wenn auch nicht so elegant ist Folgendes Dim kunden1 = (From k In TonisTortenTraumContext.Kunden Order By k.Name).Take(20).Skip(10) ' Ausgabe For Each k In Kunden Debug.WriteLine(k.Name) Next
Listing 4.70 Der Skip-Operator (VB.NET)
Das Ergebnis besteht aus den Kunden an den Positionen 11 bis 30 – sortiert nach deren Namen und unter der Voraussetzung, dass auch genügend viele existieren.