我希望能够在BindingList(Of T)上运行LINQ查询,该查询返回列表对象成员等于特定值的索引.
说我有一个类小部件的简单对象列表:
Public Class widget
Public Property foo As Integer
Public Property bar As String
End Class
Dim widgetList As BindingList(Of widget)
Run Code Online (Sandbox Code Playgroud)
我希望能够查询列表,如下所示:
Dim test As Integer = 5
Dim index = (From i In widgetList
Where i.foo = test
Select i.index).First
Run Code Online (Sandbox Code Playgroud)
这样的索引包含第一个listItem的索引,其中widgetList.Item(index).foo = 5.执行此操作的最佳方法是什么?(或者我应该使用LINQ)
我已经看到了几种C#方法来做到这一点,但我不能充分利用C#来了解如何在VB中使用它们
通过使用流畅的语法可以实现LINQ,因为有一个重载版本的Select扩展方法可以让你获得项目的索引.
试试这种方法:
Dim test As Integer = 5
Dim query = widgetList.Select(Function(o,i) New With { .Widget = o, .Index = i}) _
.FirstOrDefault(Function(item) item.Widget.Foo = test)
If query Is Nothing
Console.WriteLine("Item not found")
Else
Console.WriteLine("Item found at index {0}", query.Index)
End If
Run Code Online (Sandbox Code Playgroud)
在Select我按原样投影Widget,使用o,i参数代表索引.接下来我使用FirstOrDefault谓词进行评估Foo(你可以使用Where后跟FirstOrDefault,但这更短).你应该使用FirstOrDefault而不是First万一没有找到任何项目; FirstOrDefault如果没有找到,将返回null,而First抛出异常.这就是为什么下一步是检查结果并确保它不为空.
| 归档时间: |
|
| 查看次数: |
6013 次 |
| 最近记录: |