Сведения о вопросе

HOLY

16:06, 10th August, 2020

Теги

Как сравнить два массива объектов DataRow в PowerShell?

Просмотров: 534   Ответов: 3

У меня есть два массива объектов System.Data.DataRow , которые я хочу сравнить.

Строки имеют два столбца A и B. столбец A является ключом, и я хочу узнать, какие строки были изменены в столбце B, а какие строки были добавлены или удалены.

Как это сделать в PowerShell?



  Сведения об ответе

LIZA

17:39, 18th August, 2020

Я написал сценарий, чтобы сделать это некоторое время назад. Скрипт (Compare-QueryResults.ps1 ) доступен здесь , и Вам также понадобится мой скрипт Run-SQLQuery (доступен здесь), или вы можете заменить его своим собственным скриптом или функцией.

В принципе, сценарий делает следующее: берет результаты каждого из ваших запросов и разбивает потоки данных на части, так что каждое поле является своим собственным объектом. Затем он использует Compare-Object для проверки любых различий между данными в этих строках. Он возвращает объект сравнения, который показывает вам все различия между возвращенными данными.

Результаты являются объектом, поэтому вы можете сохранить их в переменную и использовать Sort-Object или Format-* cmdlets с ними.

Удачи. Если у вас возникнут какие-либо проблемы со сценариями, дайте мне знать, и я с удовольствием ознакомлю вас с ними. Я использовал их для тестирования приложений, наблюдая, какие строки изменяются различными действиями в программе.


  Сведения об ответе

VCe znayu

08:11, 11th August, 2020

Чтобы просто сравнить два System.Data.DataRow, вы можете сделать что-то вроде этого:

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

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


  Сведения об ответе

lesha

21:06, 1st October, 2020

Вам нужны два массива DataRows? объект DataRow имеет свойство RowState, которое даст вам то, что вам нужно. Смотрите документы MSDN: http://msdn.microsoft.com/


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться