12
votes

Requête une liste Linq-style dans 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)
Is there a way to select distinct from $codes and select the objects where type equals 1? How can I use LINQ with PowerShell?

0 commentaires

4 Réponses :


27
votes

Pour une utilisation distincte Utilisez le Select-Object-Object Code> Cmdlet (Aliasé sur Sélectionnez CODE>) avec le paramètre unique, par exemple:

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


0 commentaires

19
votes

Qu'est-ce que Keith a dit. De plus, a changé le constructeur de votre C # et utilisé le paramètre -unique sur la cmdlet de tri. XXX


0 commentaires

2
votes

Question simple, réponse simple: xxx


1 commentaires

C'est prometteur, mais comme écrit votre code ne fonctionnera pas, car il manque une logique de comparaison personnalisée afin de reconnaître duplicata [pack_code] instances; En d'autres termes: votre appel est un non-op efficace.



3
votes

La réponse utile de Doug Finke et Réponse utile de Keith Hill vous montrer des analogues PowerShell-idiomatic au .Distion () et .where () méthodes LINQ.


Dans PowerShell v3 ou supérieur vous maintenant peut utiliser linq .

La solution ci-dessous montre que LINQ peut être utilisé pour résoudre Votre problème, mais montre aussi que ce faisant est nécessite une syntaxe assez encombrante et est probablement ne vaut probablement l'effort que si vous avez besoin de fonctionnalités de requête avancées et / ou de questions de performance .

  • Voir Cette réponse pour une vue d'ensemble générale de la façon d'utiliser Linq de PowerShell.
    xxx

0 commentaires