views:

125

answers:

2

I have a class called Person:

Public Class Person    
     Private PersonID as String    
     Private Name as String   
     Private Records as GenericCollection(Of PublicRecord)

Public Sub New(ByVal ID as String)   
 Me.PersonID = ID    
 Me.Name = getPersonName(ID)  
End Sub

'Get/Sets
End Class

getPersonName is simply a function that does exactly as it is described. GenericCollection class is as follows:

Public Class GenericCollection(Of ItemType)
    Inherits CollectionBase
    ' Purpose: Provides a generic collection class from which all other collections
    ' classes can be inherited if they wish to extend the functionality below.

#Region "Public Methods"
    Public Function Add(ByVal NewObject As ItemType) As Integer
        Return MyBase.InnerList.Add(NewObject)
    End Function

    Public Sub New()
        MyBase.New()
    End Sub
#End Region

#Region "Public Properties"
    Default Public Property Item(ByVal Index As Integer) As ItemType
        Get
            Return CType(MyBase.InnerList(Index), ItemType)
        End Get
        Set(ByVal value As ItemType)
            MyBase.InnerList(Index) = value
        End Set
    End Property
#End Region
End Class

PublicRecord class is:

Public Class PublicRecord
    Private RecordID As String
    Private RecordDataOne As String
    Private RecordDataTwo As String

    Public Sub New()
        MyBase.New()
    End Sub

    'Get/Sets
End Class

One of the requirements I've been told can be done is that I should be able to grab all Persons in a Collection of Persons, then since all of those Persons will have Collectinos of Records within them... grab a specific set of data from the Collection of Records.

We'll say, I want to: getPersonsOverAge21() from the Collection of Records inside each Person inside the Collection of Persons.

Is this even possible? If so, can someone explain how it would work?

+1  A: 

There's no need to implement your own generic collection class. .Net has already done this for you in the System.Collections.Generic namespace. Look at a List(Of Person) or even just a simple IEnumerable(Of Person).

Now you haven't explained how your record objects relate to your person type or what data they contain, so I can only speculate on the next part. But it sounds kind of like you want something like this:

Dim people As List(Of Person) = GetPeopleFromDatabase() 
Dim peopleOver21 As IEnumerable(Of Person) = people.Where(Function(p) p.Age >= 21)
Joel Coehoorn
The PublicRecord object is simply a List(Of PublicRecord) within the Person class. A person has multiple Public Records, thus a collection of them is within the class.people.Records would be that collection.
jlrolin
Also, I don't have the luxury of LINQ-to-SQL.
jlrolin
Joel is demonstrating the use of LINQ to Objects.
Dan
Just noticed that... it's possible that may work. I'm not exactly sure yet though.
jlrolin
A: 
Dim peopleOver21Query = From p In people _
                        Where (p.Age >= 21) _
                        Select p
Will Marcouiller