セットアップでは、特定のチームを検索する必要があるたびにLINQクエリを実行すると想定しています。より良いアプローチはname
、キーとして持つ辞書などの線形構造を持つことです。
あなたがそこに着いたものに近づいて、ここに遊ぶためのいくつかのコードがあります:
Option Strict On
Public Class Form1
Class MyGroup
Public Teams As New List(Of MyTeam)
End Class
Class MyTeam
Public Players As New List(Of MyPlayer)
Public TeamName As String
End Class
Class MyPlayer
Public PlayerName As String
End Class
Dim m_Groups As New List(Of MyGroup)
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim p As New MyPlayer With {.PlayerName = "Player"}
Dim t As New MyTeam With {.TeamName = "Team", .Players = New List(Of MyPlayer)({p})}
m_Groups.Add(New MyGroup With {.Teams = New List(Of MyTeam)({t})})
Dim name As String = "Player" 'player name to be searched
Dim teamName = (From group In m_Groups _
From team In group.Teams _
From player In team.Players _
Where player.PlayerName.Equals(name) _
Select team.TeamName).FirstOrDefault()
End Sub
End Class
@millimooseの回答に大きく影響されましたが、2つのわずかな変更があります。
Dim team
-> 、同じスコープに2つの変数を含めるDim teamName
ことはできません。team
- OPはチーム名が欲しいので、に
Select player
なりましSelect team.TeamName
た。