过滤嵌套的 ArrayList 属性

Filter ArrayList on nested property

我有一个 PowerShell ArrayList ($displayObjects),其中包含:

Name  ID  Tags
----  --  ----
Test1 123 {@{id=4567; name=test1;}}
Test2 345 {@{id=4567; name=test1;}, @{id=6789; name=test2}}
Test3 567 {@{id=4567; name=test1;}, @{id=6789; name=test2}, @{id=7890; name=test3}}

还有一个:

$filter = @('test1', 'test2')

然后根据 $filter 数组中指定的值过滤 $displayObjects (Tags.name)。

所以在上面的例子中,结果应该只包含第 2 行和第 3 行(来自 $displayObjects)。

我已经用 $displayObjects | Where-Object ... 开始思考和测试,但想不出一种方法可以在那里循环。有什么建议吗?

类似这样的方法可能有效:

... | Where-Object {
    $a = @($_.Tags.name)
    ($filter | Where-Object {$a -contains $_}).Count -eq $filter.Count
}

使用 LINQ ( 可能有更有效的方法来做到这一点?),但我对此不够精通。

这应该有效。不过,这可能不是最有效的方法。

$displayObjects | Where-Object { 
    $tags = [string]$_.Tags
    $returnObject = $true
    $filter | foreach {
        if($tags -notlike "*$_*"){
            $returnObject = $false
        }
    }
    $returnObject
}