2013-03-21 2 views
1

Как вы получаете коллекцию объектов из пересечения массива объектов и массива строк?VB.NET Linq To Objects Intersect Возвращаемые объекты

К примеру, у меня есть коллекция объектов (класс Person), и массив строк имен:

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

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