2009-09-09 4 views
0

J'ai une variable de classe privée qui détient une collection d'éléments de commande:méthode d'extension where() sur un System.Collections.Generic.SortedList

Private _Items As New System.Collections.Generic.SortedList(Of Integer, OrderItem) 

Ce que je suis en train de le faire et ECRIRE un sous-ensemble des éléments via une propriété sur la classe en utilisant la méthode d'extension .Where() de IEnumerable (je pense). Quelque chose du genre:

Public Property StandardItems() As SortedList(Of Integer, OrderItem) 
    Get 
     Return _Items.Where(Function(ItemID As Integer, Item As OrderItem) Item.ItemType = "SomeValue") 
    End Get 
    Set(ByVal value As SortedList(Of Integer, OrderItem)) 
     _Items = value 
    End Set 
End Property 

Est-ce possible? Si oui, comment l'implémenterais-je? Je n'ai pas beaucoup de chance avec des documents MSDN, Visual Studio IntelliSense ou des essais et erreurs.

Répondre

1

La méthode d'extension Where renvoie un IEnumerable(Of KeyValuePair(Of Integer, OrderItem)). Vous pouvez changer le type de votre propriété.

Si vous avez besoin de retourner une liste triée, vous devrez créer manuellement que depuis la sortie de Where méthode:

Dim whereQuery = ... 
Return New SortedList(Of Integer, OrderItem)(whereQuery _ 
         .ToDictionary(Function(x) x.Key, Function(x) x.Value)) 

Je suis un peu inquiet de la façon dont votre setter se comportent. Voulez-vous remplacer toute votre liste triée dans la propriété? Son nom dit que ce sont juste des éléments standard (un ensemble filtré d'éléments) mais le réglage changerait tous les éléments.

+0

J'ai peur que cela puisse être le cas. Je ne veux pas vraiment retourner un IEnumerable ou un Newed SortedList. J'espérais pouvoir retourner juste une "vue filtrée" de la liste de base. Je sais ce que vous dites sur le réglage. C'était un exemple et je n'y ai pas beaucoup réfléchi. Il semblerait que je devrais changer d'approche pour accéder aux éléments de ma solution. –

Questions connexes