过滤嵌套的 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
}
我有一个 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
}