我想要比较两个System.Data.DataRow
个对象数组。
行有两列A和B.列A是一个键,我想找出哪些行的B列已更改,哪些行已添加或删除。
如何在PowerShell中执行此操作?
答案 0 :(得分:4)
我写了一段脚本来做这件事。脚本(Compare-QueryResults.ps1)可用here,您还需要我的Run-SQLQuery脚本(可用here),或者您可以将其替换为您自己的脚本或函数。
基本上,脚本所做的是获取每个查询的结果并将数据行分开,以便每个字段都是它自己的对象。然后,它使用Compare-Object检查这些行中的数据之间的任何差异。它返回一个比较对象,显示返回数据之间的所有差异。
结果是一个对象,因此您可以将它们保存到变量中,并使用Sort-Object或Format- * cmdlet。
祝你好运。如果你对脚本有任何问题,请告诉我,我很乐意引导你完成它们。我一直在使用它们进行应用程序测试,看看程序中的不同操作正在修改哪些行。答案 1 :(得分:1)
要简单地比较两个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
}
}
答案 2 :(得分:0)
您需要两个DataRows数组吗? DataRow对象具有RowState属性,可以为您提供所需的属性。请参阅MSDN文档:http://msdn.microsoft.com/