LINQ查询,用于筛选列表的列表中的项



我有一个包含更多项目的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

相关内容

  • 没有找到相关文章

最新更新