优雅的方式来过滤复杂的对象数组

时间:2013-09-24 22:13:11

标签: c# linq powershell

所以我在PowerShell中有一个具有以下属性的对象(这是它的JSON表示只包含一个项目):

        "NetworkResourcePermittedUsers": [
          {
            "PermittedUser": {
              "UserName": "somedomain\\someuser"
            },
            "SecurityAccessLevel": {
              "Level": "Read"
            },
            "SecurityAccessMode": {
              "Mode": "Allow"
            }
          }
        ]

我想要做的是根据NetworkResourcePermittedUsers内的Level字段过滤我的SecurityAccessLevel数组,基本上是:SecurityAccessLevel.Level

在LINQ中我会做类似的事情:

networkResourcePermittedUsers.Any(x => x.SecurityAccessLevel.Level.Equals("myvalue"))

我知道在PowerShell中我可以使用类似的东西:

$networkResourcePermittedUsers -contains "value"

但在这种情况下,-contains参数假设我有一个由值对象(stringint等组成的数组)

那么有没有办法使用-contains参数来过滤复杂的对象图?

类似的东西:

#this is bad code -- doesn't work
$networkResourcePermittedUsers -contains "myvalue" -path SecurityAccessLevel.Level

1 个答案:

答案 0 :(得分:8)

您不能使用-contains运算符,但可以使用类似于LINQ的管道:

$networkResourcePermittedUsers | Where-Object {
    $_.SecurityAccessLevel.Level -eq 'myvalue' }