Запросите LINQ-стиль списка в PowerShell

add-type -Language CSharpVersion3 -TypeDefinition @"
    public class pack_code
    {
        public pack_code() {}

        public string code { get; set; }
        public string type { get; set; }
    }
"@

$a = New-Object pack_code
$a.code = "3"
$a.type = "5"
$b = New-Object pack_code
$b.code = "2"
$b.type = "5"
$c = New-Object pack_code
$c.code = "2"
$c.type = "5"
$d = New-Object pack_code
$d.code = "1"
$d.type = "1"

$codes = New-Object 'System.Collections.Generic.List[object]'
$codes.add($a)
$codes.add($b)
$codes.add($c)
$codes.add($d)

Существует ли способ выбрать отличный от $codes и выбрать объекты, где тип равняется 1? Как я могу использовать LINQ с PowerShell?

12
задан mklement0 7 January 2018 в 03:36
поделиться

2 ответа

То, что сказал Кит. Плюс, изменил конструктор в своем C# и использовал параметр -Unique в команде Sort.

Add-Type -Language CSharpVersion3 -TypeDefinition @"
    public class pack_code
    {
        public pack_code(string code, string type) {
            this.code=code;
            this.type=type;
        }

        public string code { get; set; }
        public string type { get; set; }
    }
"@

$codes = New-Object 'System.Collections.Generic.List[object]'
$codes.Add( ( New-Object pack_code 3, 5 ))
$codes.Add( ( New-Object pack_code 2, 5 ))
$codes.Add( ( New-Object pack_code 2, 5 ))
$codes.Add( ( New-Object pack_code 1, 1 ))
$codes.Add( ( New-Object pack_code 2, 2 ))
$codes.Add( ( New-Object pack_code 2, 1 ))
$codes.Add( ( New-Object pack_code 2, 1 ))

$codes | sort code, type -Unique | where {$_.type -eq 1}
17
ответ дан 2 December 2019 в 03:22
поделиться

Для отдельного использования используйте командлет Select-Object (с псевдонимом Select ) с параметром Unique, например:

PS> 1,2,3,4,4,2 | Select-Object -Unique
1
2
3
4

Для фильтрации используйте Where-Object командлет (псевдоним , где и ? ):

PS> $codes | where {$_.Type -eq '1'}

Что касается LINQ, вы не можете использовать операторы LINQ в PowerShell, потому что PowerShell не поддерживает вызов общих методов .NET или статических методы расширения, которые имеют решающее значение для LINQ.

Примечание редактора: PSv3 + теперь поддерживает эти функции.

26
ответ дан 2 December 2019 в 03:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: