包含 ID 列表的对象集合 Linq

object Collection Containing a List of IDs Linq

我有一个列表框,用户可以使用多个select。我想使用 Linq 并带回用户 selects 的 selected ID 的记录。我需要为每个 selected ID

带回完整的对象记录

这是联系人对象和集合对象

 Namespace MODEL
     <System.Serializable()> _
     Public Class ContactCollection
         Inherits System.Collections.ObjectModel.Collection(Of Contact)
         Implements IList(Of Contact)
     End Class
 End Namespace


 Namespace MODEL
     <System.Serializable()> _
     Public Class Contact

         Private mContactID As Int32 = 0
         Private mFirstName As String
         Private mLastName As String

         Public Property ContactID As Int32
             Get
                 Return mContactID
             End Get
             Set(value As Int32)
                 mContactID = value
             End Set
         End Property

         Public Property FirstName As String
             Get
                 Return mFirstName
             End Get
             Set(value As String)
                 mFirstName = value
             End Set
         End Property

         Public Property LastName As String
             Get
                 Return mLastName
             End Get
             Set(value As String)
                 mLastName = value
             End Set
         End Property

     End Class
 End Namespace

正在向集合对象添加 5 条记录

            Dim objCollection As New MODEL.ContactCollection
            Dim obj As New MODEL.Contact

            objCollection.Add(New MODEL.Contact With {
            .ContactID = 1, _
            .FirstName = "John", _
            .LastName = "Smtih" _
            })

            objCollection.Add(New MODEL.Contact With {
            .ContactID = 2, _
            .FirstName = "Mark", _
            .LastName = "Davis" _
            })

            objCollection.Add(New MODEL.Contact With {
            .ContactID = 3, _
            .FirstName = "Tom", _
            .LastName = "Howe" _
            })

            objCollection.Add(New MODEL.Contact With {
            .ContactID = 4, _
            .FirstName = "Jerry", _
            .LastName = "Thomas" _
            })

            objCollection.Add(New MODEL.Contact With {
            .ContactID = 5, _
            .FirstName = "Jane", _
            .LastName = "Marry" _
            })

这是列表框中select编辑的联系人列表

            Dim lstContacts As New List(Of Integer)
            lstContacts.Add(2)
            lstContacts.Add(4)

我不确定此时如何使用 Linq 来查找值。我想我必须使用 contains 但我尝试了很多不同的方法,但我无法获得这些值。

我试过这个 Linq,但没有用,也没有带回任何记录

 Dim objSearch from SearchContacts in objCollection
        Where (lstContacts.Contains(SearchContacts.ContactID))

要获取 ID,请尝试:

Dim ids As IEnumerable(Of Int32) = myListBox.SelectedItems _
                                    .OfType(Of Contact)() _
                                    .Select( Function(c) c.ContactID ) _

编辑

如果你想要通讯录,你可以:

Dim ids As IEnumerable(Of Contact) = myListBox.SelectedItems _
                                    .OfType(Of Contact)()

如果您想要单独复制的集合中的联系人,您可以:

Dim ids As List(Of Contact) = myListBox.SelectedItems _
                                    .OfType(Of Contact)() _
                                    .ToList()

最后(如果您认为这是您真正的问题 - 只需告诉我,我会删除上面的所有内容)

Dim selectedContacts As IEnumerable(Of MODEL.Contact) = From contact In objCollection
                                                           Join id In lstContacts
                                                           On contact.ContactID Equals id
                                                           Select contact