2008-08-21 7 views
2

J'ai un objet de type System.Generic.Collections.List (Of MyCustomClass).Page a Collection générique sans Linq

Étant donné les nombres entiers variables pageize et pagenumber, comment puis-je collecter uniquement une seule page de MyCustomClass objets?

Voici ce que j'ai. Comment puis-je l'améliorer?

'my given collection and paging parameters 
Dim AllOfMyCustomClassObjects As System.Collections.Generic.List(Of MyCustomClass) = GIVEN 
Dim pagesize As Integer = GIVEN 
Dim pagenumber As Integer = GIVEN 

'collect current page objects 
Dim PageObjects As New System.Collections.Generic.List(Of MyCustomClass) 
Dim objcount As Integer = 1 
For Each obj As MyCustomClass In AllOfMyCustomClassObjects 
If objcount > pagesize * (pagenumber - 1) And count <= pagesize * pagenumber Then 
    PageObjects.Add(obj) 
End If 
objcount = objcount + 1 
Next 

'find total page count 
Dim totalpages As Integer = CInt(Math.Floor(objcount/pagesize)) 
If objcount Mod pagesize > 0 Then 
totalpages = totalpages + 1 
End If 

Répondre

1

Vous utilisez GetRange sur votre collection mise en œuvre IEnuramble:

List<int> lolInts = new List<int>(); 

for (int i = 0; i <= 100; i++) 
{ 
    lolInts.Add(i); 
} 

List<int> page1 = lolInts.GetRange(0, 49); 
List<int> page2 = lilInts.GetRange(50, 100); 

Je crois que vous pouvez comprendre comment utiliser GetRange pour saisir une page individuelle d'ici.

2

Generic.List devrait fournir le saut() et Take() méthodes, vous pouvez le faire:

Dim PageObjects As New System.Collections.Generic.List(Of MyCustomClass) 
PageObjects = AllOfMyCustomClassObjects.Skip(pagenumber * pagesize).Take(pagesize) 

Si par "sans Linq" vous vouliez dire sur le Framework 2.0, je ne Ne croyez pas que List (Of T) supporte ces méthodes. Dans ce cas, utilisez GetRange comme suggéré par Jonathan.

Questions connexes