vb.net 中的 lambda:Select 列表的某些 object,基于第一个 object 中 object 列表的属性
lambda in vb.net: Select certain objects of a list, based on an attribute of a list of object within the first object
问题的标题不是很清楚,但我很难把它表述得更好。我将展示我正在尝试做的事情的示例。
Function foo(id As Integer) As List(Of Version)
Dim listOfVersions as List(Of Version) = New List(Of Version)
For each version In MasterListOfVersions
For each object In version.ListOfObjects
If object.idObject = id Then listOfVersions.Add(version)
Next
Next
Return listOfVersions
End Function
这行得通,但我正在尝试将其转换为 lambda 表达式。到目前为止,我已经记下了:
Return MasterListOfVersions.Select(Function(version) version.ListOfObjects.Where( _
Function(object) object.idObject = id)).ToList()
但不太正确...我收到以下错误消息:
List(Of IEnumerable(Of Object)) cannot be converted to List(Of Version)
我觉得我已经很接近答案了,但是我已经找了一段时间了,好像卡住了。任何帮助将不胜感激。
基本上你根本不需要调用 Select
- 你只需要执行 过滤 操作,这就是 Where
给你的.您不是要转换列表。所以只需使用:
Return MasterListOfVersions.Where_
(Function(version) version.ListOfObjects.Any_
(Function object) object.id = id)).ToList()
换句话说,return 所有版本,其中 任何 个对象具有指定的 ID。请注意,与您的原始代码不同,这只会添加 MasterListOfVersions
的每个元素一次,即使其 ListOfObjects
具有多个具有匹配 ID 的条目。老实说,我怀疑这就是你想要的。
请注意,在您的原始代码中,您在一处使用了 object.idObject
,而在另一处使用了 object.id
。哪个正确还不清楚。
您可能需要使用 .SelectMany 来 select 来自子列表。
我有一篇关于它的博客post:
http://blogs.msmvps.com/deborahk/finding-in-a-child-list/
这是一个例子 post:
Dim foundCustomers = custList.
SelectMany(Function(cust) cust.ContactList.
Where(Function(cn) cn.LastName.StartsWith("B")),
Function(cust, cn) cust)
问题的标题不是很清楚,但我很难把它表述得更好。我将展示我正在尝试做的事情的示例。
Function foo(id As Integer) As List(Of Version)
Dim listOfVersions as List(Of Version) = New List(Of Version)
For each version In MasterListOfVersions
For each object In version.ListOfObjects
If object.idObject = id Then listOfVersions.Add(version)
Next
Next
Return listOfVersions
End Function
这行得通,但我正在尝试将其转换为 lambda 表达式。到目前为止,我已经记下了:
Return MasterListOfVersions.Select(Function(version) version.ListOfObjects.Where( _
Function(object) object.idObject = id)).ToList()
但不太正确...我收到以下错误消息:
List(Of IEnumerable(Of Object)) cannot be converted to List(Of Version)
我觉得我已经很接近答案了,但是我已经找了一段时间了,好像卡住了。任何帮助将不胜感激。
基本上你根本不需要调用 Select
- 你只需要执行 过滤 操作,这就是 Where
给你的.您不是要转换列表。所以只需使用:
Return MasterListOfVersions.Where_
(Function(version) version.ListOfObjects.Any_
(Function object) object.id = id)).ToList()
换句话说,return 所有版本,其中 任何 个对象具有指定的 ID。请注意,与您的原始代码不同,这只会添加 MasterListOfVersions
的每个元素一次,即使其 ListOfObjects
具有多个具有匹配 ID 的条目。老实说,我怀疑这就是你想要的。
请注意,在您的原始代码中,您在一处使用了 object.idObject
,而在另一处使用了 object.id
。哪个正确还不清楚。
您可能需要使用 .SelectMany 来 select 来自子列表。
我有一篇关于它的博客post: http://blogs.msmvps.com/deborahk/finding-in-a-child-list/
这是一个例子 post:
Dim foundCustomers = custList.
SelectMany(Function(cust) cust.ContactList.
Where(Function(cn) cn.LastName.StartsWith("B")),
Function(cust, cn) cust)