我有一个项目列表,其中包含ICollection
个更多项目,我想知道是否有人可以帮我使用lambda表达式来过滤此列表。
这是我的列表:
Public Class ItemDto
Public Property ItemId As Integer
Public Property ItemLs As ICollection(Of ItemLDto) = New HashSet(Of ItemLDto)
End Class
快速查看对象的外观
ItemID = 1
ItemLs (Id=1, Type=2)
ItemLs (Id=2, Type=3)
ItemID = 2
ItemLs (Id=1, Type=2)
ItemLs (Id=2, Type=3)
ItemID = 3
ItemLs (Id=1, Type=2)
ItemLs (Id=2, Type=3)`
我想要做的是创建一个LINQ查询,它将返回以下结果。基本上使用ItemLs
过滤掉所有Type=3
。我不确定为什么这会让我觉得它似乎应该如此简单
ItemID = 1
ItemLs (Id=2, Type=3)
ItemID = 2
ItemLs (Id=2, Type=3)
ItemID = 3
ItemLs (Id=2, Type=3)
尽量避免将其放入循环并创建新对象,但目前我使用此查询循环遍历它并非理想。
item.ItemsLs.FirstOrDefault(Function(m) m.Type = 3)
感谢任何指针
答案 0 :(得分:3)
SelectMany
是您正在寻找的,使用基于语法的查询更容易推理:
Dim result = From parent In source
From child In parent.ItemsLs
Where child.Type = 3
Select New With { .ItemDto = parent, .ItemLs = child }
如果有多个child
项目Type = 3
,它也会有用。