LINQ查询过滤列表列表中的项目

时间:2015-05-30 06:08:21

标签: .net vb.net 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查询,它将返回以下结果。基本上使用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)

感谢任何指针

1 个答案:

答案 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,它也会有用。