Pergunta

Eu tenho duas matrizes de System.Data.DataRow objetos que desejo comparar.

As linhas têm duas colunas A e B.A coluna A é uma chave e quero descobrir quais linhas tiveram sua coluna B alterada e quais linhas foram adicionadas ou excluídas.

Como faço isso no PowerShell?

Foi útil?

Solução

Eu escrevi um script para fazer isso há pouco tempo.O script (Compare-QueryResults.ps1) está disponível aqui e você também precisará do meu script Run-SQLQuery (disponível aqui) ou você pode substituí-lo por um script ou função de sua preferência.

Basicamente, o que o script faz é pegar os resultados de cada uma de suas consultas e separar as linhas de dados para que cada campo seja seu próprio objeto.Em seguida, ele usa Compare-Object para verificar quaisquer diferenças entre os dados nessas linhas.Ele retorna um objeto de comparação que mostra todas as diferenças entre os dados retornados.

Os resultados são um objeto, portanto você pode salvá-los em uma variável e usar os cmdlets Sort-Object ou Format-* com eles.

Boa sorte.Se você tiver algum problema com os scripts, me avise, ficarei feliz em orientá-lo.Eu os tenho usado para testes de aplicativos, vendo quais linhas estão sendo modificadas por diferentes ações em um programa.

Outras dicas

Para simplesmente comparar dois System.Data.DataRow, você pode fazer algo assim:

foreach ($property in ($row1 | Get-Member -MemberType Property)) {
    $pName = $property.Name

    if ($row1.$pName -ne $row2.$pName) {
        Write-Host "== $pName =="
        $row1.$pName
        $row2.$pName
    }
}

Você precisa de dois arrays de DataRows?o objeto DataRow possui uma propriedade RowState que fornecerá o que você precisa.Consulte os documentos do MSDN: http://msdn.microsoft.com/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top