1

オブジェクト配列と文字列配列の共通部分からオブジェクトのコレクションを取得するにはどうすればよいですか?

たとえば、オブジェクトのコレクション (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 は何をしますか?

4

2 に答える 2

2

次の内容を使用できます。

    Dim query = From myPerson In personArray
                Where arrayNames.Contains(myPerson.lastName)
                Select myPerson
于 2013-03-21T19:38:36.320 に答える
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
于 2013-03-21T19:52:03.427 に答える