Фильтр ArrayList по вложенному свойству - PullRequest
0 голосов
/ 03 октября 2018

У меня есть 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')

И что фильтровать $displayObjects (Tags.name) на основе значений, указанных в массиве $filter.

Так что в приведенном выше случае результат должен содержать только строки 2 и 3 (из $displayObjects).

У меня естьЯ думаю и тестирую с $displayObjects | Where-Object ..., но не могу придумать, как это сделать.Есть предложения?

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Это должно работать.Это может быть не самый эффективный способ.

$displayObjects | Where-Object { 
    $tags = [string]$_.Tags
    $returnObject = $true
    $filter | foreach {
        if($tags -notlike "*$_*"){
            $returnObject = $false
        }
    }
    $returnObject
}
0 голосов
/ 03 октября 2018

Что-то вроде этого может работать:

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

Возможно, есть более эффективный способ сделать это с LINQ ( как этот ?), Но яЯ недостаточно разбираюсь в этом.

...