gpt4 book ai didi

vb.net - 使用 LINQ 从 List(of ParentObject) 中查找重复的子项

转载 作者:行者123 更新时间:2023-12-01 15:22:31 25 4
gpt4 key购买 nike

我在 VB.Net 中有窗口应用程序。我有以下类(class)和枚举。

Public Class Page
Public Property Name As String
Public Property PageItems As List(Of PageItem)
End Class


Public Class PageItem
Public Property ItemName As String
Public Property mode As Mode
End Class

Public Enum Mode
Mode1
Mode2
End Enum

在我的应用程序中,我有一个 List(Of Page) 属性。一个 Page 可以有多个 PageItem 并且 PageItem.ItemName 可以用不同的模式复制。例如应用程序可以有一个带有 Mode1Mode2PageItem(这里 Mode1 项可能在 Page 中(0)Mode2 项目可能在 Page(1))

我的问题是如何找到同时具有 Mode1List(相同的 ItemName)使用 LINQ 从 List(Of Page) 属性获取 code>Mode2

例子:

Page 1 has 3 Items {Item1, Mode1}, {Item2,Mode1}, {Item3,Mode2}

Page 2 has 2 Items {Item1, Mode2}, {Item4, Mode1}

这里我想要一个 PageItems 列表,它同时具有模式 Mode1Mode2。在上面的例子中,结果应该是 {Item1, Mode1}, {Item1, Mode2}(Item1 有两个 Modes)

最佳答案

因为您需要“PageItems 组”,所以我采用了这种方法:

From p In pages From pi In p.PageItems _
Group By pi.ItemName Into Group _
Where (New Mode(){Mode.Mode1, Mode.Mode2}).All(Function(m) _
(From pig In Group Where pig.pi.Mode = m).Any) _
Select ItemName, PageItems=(From pig In Group Select pig.pi)

注意最后的 Select 减少了可用信息。如果你删除它,你也会得到每个组的页面。

为了测试这一点,我使用了您的数据集,除了我有 Item3Mode2(而不是向枚举添加新的 Mode3)现在为了在评论中测试你的问题的答案,我将 Item4 更改为 Item3,以便为我的上述答案返回两组。

“仅获取一个 List(Of PageItems)”的答案只是对最后一行 Select 的更改:

From p In pages From pi In p.PageItems _
Group By pi.ItemName Into Group _
Where (New Mode(){Mode.Mode1, Mode.Mode2}).All(Function(m) _
(From pig In Group Where pig.pi.Mode = m).Any) _
From pig In Group Select pig.pi

关于vb.net - 使用 LINQ 从 List(of ParentObject) 中查找重复的子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12421690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com