es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

LINQ en PowerShell

Estoy convirtiendo la aplicación de C# a PowerShell. ¿Cómo puedo llamar a LINQ desde PowerShell?

“`powershell
[Data.DataTable]$dt = New-Object System.Data.DataTable
[Data.DataColumn]$column = New-Object System.Data.DataColumn "Id", ([int])
$dt.Columns.Add($column)

<h1>agregar datos</h1>

[Data.DataRow]$row = $dt.NewRow()
$row["Id"] = 1
$dt.Rows.Add($row)
$row = $dt.NewRow()
$row["Id"] = 2
$dt.Rows.Add($row)

<h1>LINQ en C#: int[] results = dt.AsEnumerable().Select(d => d.Field<int>("Id")).ToArray();</h1>

[int[]]$results = [Linq.Enumerable]::Select($dt,[Func[int,int]]{ $args[0]})

<h1>Error: No se puede encontrar una sobrecarga para "Select" y el número de argumentos: "2"</h1>

Write-Host $results
“`

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para llamar a LINQ desde PowerShell, puedes usar la clase [System.Linq.Enumerable]. Sin embargo, en el código de ejemplo proporcionado, la conversión no se realiza correctamente. El código en C# selecciona el campo "Id" de cada fila de la tabla y lo convierte en un array, pero el código en PowerShell simplemente devuelve la misma tabla de datos. Para solucionar esto, puedes modificar el código PowerShell de la siguiente manera:

    # convertir la tabla de datos en filas enumerables
    $rows = [System.Linq.Enumerable]::Cast([System.Data.EnumerableRowCollection]::Cast($dt.Rows))
    
    # seleccionar el campo "Id" de cada fila y convertirlo en un array
    [int[]]$results = [System.Linq.Enumerable]::Select($rows, [Func[System.Data.DataRow, int]]{ $_["Id"] })
    
    # imprimir los resultados
    Write-Host $results
    

    Este código primero convierte las filas de la tabla en una colección enumerable, luego usa LINQ para seleccionar el campo "Id" de cada fila y convertirlo en un array. El array resultante se almacena en la variable $results, que se puede utilizar o imprimir según se desee.

Comments are closed.