2011-11-17 41 views
1

如果我有以下結構:如何編寫一個包含語句以匹配類的成員?

Public Class UserData 
    Public ID As String 
    Public Name As String 
End Class 

我怎樣才能在條件這樣的選擇呢?

Dim myUsers As New System.Collections.Generic.List(Of UserData) 

If myUsers.Contains(.ID = "1") = True Then 
    ... 

我知道myUsers.Contains(.ID = "1")是完全錯誤的,但我很好奇如何做這樣的事情?可能嗎?這是LINQ的工作嗎?

回答

2

如何:

If myUsers.Any(Function(u) u.ID = "1") Then 
    ... 

當然,如果你打算做其再次,你可能會更好創造一個集搜索:

Dim myUserSet = New HashSet(Of String)(myUsers.[Select](Function(u) u.ID)) 
For Each userId In selectedUserIds 
    If myUserSet.Contains(userId) Then 
     ... 

我的vb很生鏽。請原諒語法錯誤

+0

我將這樣做不止一次,但它在'RowDataBound'事件中......所以像這樣的任何類型的優化只會一遍又一遍地運行......除非我使用靜態成員?我很新的.NET – afuzzyllama

+0

@afuzzyllama:你應該能夠創建與myUsers相同範圍內的HashSet。如果myUsers是根據事件中的數據計算的,那麼創建HashSet可能沒有意義。 – StriplingWarrior

+0

'我得到這個:'任何'不是'System.Collections.Generic.List(Of UserData)'的成員。我會嘗試HashSet的想法。 – afuzzyllama

1

這裏的VB版本:

If myUsers.Any(Function(i) i.ID = "1") Then ... 
+0

我得到這個:''任何'不是'System.Collections.Generic.List(Of UserData)'的成員' – afuzzyllama

1

你爲什麼不使用字典

var myUserDict = new Dictionary<String, UserData> 
if(myUserDict.ContainsKey("1")).. 

也只當然的意義,如果你打算用做任何事情選定的用戶。

+0

你的'任何'不是'System.Collections.Generic.List(Of UserData )問題:你在使用System.Linq命名空間嗎? – Alex

+0

不...不,我不是。我假設這就是爲什麼我沒有看到Any()函數。另外,我正在以我的方式做它,因爲我將數據綁定到GridView – afuzzyllama

相關問題