我有一个包含更多项目的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查询,将返回以下结果。基本上是用一个Type=3
过滤掉所有的ItemLs
。我不知道为什么这避开了我,因为它似乎应该如此简单
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)
谢谢你的指点
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
。