DevTrain Startseite Advanced Developers Conference vom 14.-15. Februar 2011  
  
  
SUCHEN:  
ARTIKEL ONLINE: 525   

Kategorien
.NET
Datenbanken
Web
XML

Allgemein
Camp
Foren
Events
Persönliche Einstellungen
Registrieren
Prämien Shop
Kontakt
Impressum
Über DevTrain

Autoren



 

Forum: VB.NET | Thema: AW: Sortieren und Filtern einer Collection | Von: Bernhard Grojer ( 29.06.2006 23:45)

Ich bin mal einen Schritt weiter:

Namespace CustomList

Public Class ListBase(Of T)
Inherits System.Collections.Generic.List(Of T)

Public Sub Filter(ByVal strField As String, ByVal FilterOperators As FilterOperators, ByVal strValue As String)
For i As Integer = MyBase.Count - 1 To 0 Step -1
Select Case FilterOperators
Case FilterOperators.Smaller
If Not MyBase.Item(i).GetType.GetProperty(strField).GetValue(MyBase.Item(i), Nothing) < strValue Then
MyBase.Remove(MyBase.Item(i))
End If

Case FilterOperators.Bigger
If Not MyBase.Item(i).GetType.GetProperty(strField).GetValue(MyBase.Item(i), Nothing) > strValue Then
MyBase.Remove(MyBase.Item(i))
End If

Case FilterOperators.Like
If String.Compare(MyBase.Item(i).GetType.GetProperty(strField).GetValue(MyBase.Item(i), Nothing).ToString, strValue.ToString, True) = 0 Then
MyBase.Remove(MyBase.Item(i))
End If

Case FilterOperators.Equal
If String.Compare(MyBase.Item(i).GetType.GetProperty(strField).GetValue(MyBase.Item(i), Nothing).ToString, strValue.ToString) = 0 Then
MyBase.Remove(MyBase.Item(i))
End If

Case FilterOperators.NotEqual
If String.Compare(MyBase.Item(i).GetType.GetProperty(strField).GetValue(MyBase.Item(i), Nothing).ToString, strValue.ToString) <> 0 Then
MyBase.Remove(MyBase.Item(i))
End If

Case Else
Throw New Exception("Filteroperator not implemented!")

End Select
Next
End Sub
Public Overloads Sub Sort(ByVal strSortField As String)
MyBase.Sort(New CustomComparer(Of T)(strSortField))
End Sub
End Class

Enum FilterOperators
Smaller
Bigger
[Like]
Equal
NotEqual
End Enum
Public Class CustomComparer(Of T)
Inherits Comparer(Of T)

Private _sortField As String

Public Sub New(ByVal sortField As String)
_sortField = sortField
End Sub

Public Overrides Function Compare(ByVal x As T, ByVal y As T) As Integer
Dim ObjectX As Object = x.GetType().GetProperty(Me._sortField).GetValue(x, Nothing)
Dim ObjectY As Object = y.GetType().GetProperty(Me._sortField).GetValue(y, Nothing)
Return String.Compare(ObjectX, ObjectY)
End Function
End Class

Public MustInherit Class ItemBase
End Class

End Namespace


Anwendung:

Dim TestList As New ListBase(Of TestItem)
For i As Integer = 0 To 10
TestList.Add(New TestItem("Test1"))
TestList.Add(New TestItem("Test2"))
TestList.Add(New TestItem("Test4"))
TestList.Add(New TestItem("Test3"))
TestList.Add(New TestItem("Test5"))
Next

Console.WriteLine("Filter Start: " & Now & ":" & Now.Millisecond)
TestList.Filter("Name", FilterOperators.Like, "Test4")
Console.WriteLine("Filter Stop: " & Now & ":" & Now.Millisecond)

Console.WriteLine("Sort Start: " & Now & ":" & Now.Millisecond)
TestList.Sort("Name")
Console.WriteLine("Sort Stop: " & Now & ":" & Now.Millisecond)

For Each myTestItem As TestItem In TestList
Console.WriteLine(myTestItem.Name)
Next

Public Class TestItem
Inherits ItemBase

Private _name As String

Property Name() As String
Get
Return Me._name
End Get
Set(ByVal value As String)
Me._name = value
End Set
End Property

Public Sub New(ByVal Name As String)
_name = Name
End Sub

End Class

Jetzt gehts ans Tuning (und implementieren von Datumssortierung, Filterung, usw. usf.

Vorschläge Ideen?



Antworten
Vorsicht bei der Eingabe: Die Zeichen ' oder -- sind nicht erlaubt!

 Betreff:
 Nachricht: Den Beitrag finden Sie nun unter: http://beta.devtrain.de/foren Die Benutzerdaten und Foreninhalte von beta.devtrain.de und www.devtrain.de sind die selben.
Sie können sich dort sogar per RSS über neue Inhalte informieren lassen.
Bei Problemen bitte direkt Mail an asp [AT] ppedv.de.

 Signatur:

  



Login
Username:


Passwort:






Passwort vergessen?

Advanced Developers Conference vom 14.-15. Februar 2011

© Copyright 2003 ppedv AG