2013-03-21 32 views
1

如何从对象数组和字符串数组的交集中获取对象的集合?VB.NET Linq到对象相交返回对象

例如,我有对象(类人)的集合,并且名称的字符串数组:

Public Class Person 
    Public lastName As String 
    Public firstName As String 
End Class 

Public Class Form1 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     Dim personArray As List(Of Person) 
     Dim p1 As Person = New Person("Bill", "Fitch") : personArray.Add(p1) 
     Dim p2 As Person = New Person("Randy", "Roberts") : personArray.Add(p2) 
     Dim p3 As Person = New Person("Miles", "Johnson") : personArray.Add(p3) 
     Dim p4 As Person = New Person("Sandy", "Smith") : personArray.Add(p4) 

     Dim arrayNames() As String = {"Jones", "Roberts", "Smith", "Teague"} 

     'The Linq code 
     Dim query = From myPerson In personArray 
        Where myPerson.lastName = arrayNames 
        Select myPerson 
    End Sub 
End Class 

当然LINQ的代码不工作,但什么LINQ的呢?

回答

2

您可以使用包含:

Dim query = From myPerson In personArray 
       Where arrayNames.Contains(myPerson.lastName) 
       Select myPerson 
+0

谢谢!有时它只是需要轻轻一点! – ForEachLoop 2013-03-22 18:01:59

0

你可以使用一个连接:

Dim query = From p As Person In personArray 
      Join lastName As String In arrayNames On p.lastName Equals lastName 
      Select p 

这里是完整的代码,如果你想测试一下(我稍微改变了你的代码,确保它编译)。

Public Class Form1 
    Public Class Person 
    Public lastName As String 
    Public firstName As String 
    Sub New(firstName As String, lastName As String) 
     Me.lastName = lastName 
     Me.firstName = firstName 
    End Sub 
    End Class 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    Dim personArray As New List(Of Person)({ 
     New Person("Bill", "Fitch"), 
     New Person("Randy", "Roberts"), 
     New Person("Miles", "Johnson"), 
     New Person("Sandy", "Smith") 
    }) 

    Dim arrayNames() As String = {"Jones", "Roberts", "Smith", "Teague"} 

    Dim query = From p As Person In personArray 
       Join lastName As String In arrayNames On p.lastName Equals lastName 
       Select p 
    End Sub 
End Class