كيف يمكنني مقارنة صفيفين من كائنات DataRow في PowerShell؟

StackOverflow https://stackoverflow.com/questions/21956

  •  09-06-2019
  •  | 
  •  

سؤال

لدي مصفوفتين من System.Data.DataRow الكائنات التي أريد مقارنتها.

تحتوي الصفوف على عمودين A وB.العمود A هو مفتاح وأريد معرفة الصفوف التي تم تغيير العمود B الخاص بها والصفوف التي تمت إضافتها أو حذفها.

كيف أفعل هذا في باورشيل؟

هل كانت مفيدة؟

المحلول

لقد كتبت نصًا للقيام بذلك منذ فترة قصيرة.البرنامج النصي (Compare-QueryResults.ps1) متاح هنا وستحتاج أيضًا إلى البرنامج النصي Run-SQLQuery الخاص بي (متوفر هنا) أو يمكنك استبدال ذلك ببرنامج نصي أو وظيفة خاصة بك.

في الأساس، ما يفعله البرنامج النصي هو أخذ نتائج كل استعلاماتك وفصل صفوف البيانات بحيث يكون كل حقل هو كائن خاص به.ثم يستخدم كائن المقارنة للتحقق من وجود أي اختلافات بين البيانات الموجودة في تلك الصفوف.تقوم بإرجاع كائن مقارنة يوضح لك جميع الاختلافات بين البيانات التي تم إرجاعها.

النتائج عبارة عن كائن، لذا يمكنك حفظها في متغير واستخدام Sort-Object أو أوامر cmdlets Format-* معها.

حظ سعيد.إذا كانت لديك أي مشاكل مع النصوص البرمجية، فأخبرني بذلك، وسيسعدني أن أطلعك عليها.لقد كنت أستخدمها لاختبار التطبيقات، ومعرفة الصفوف التي يتم تعديلها من خلال إجراءات مختلفة في البرنامج.

نصائح أخرى

لمقارنة اثنين من 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
    }
}

هل تحتاج إلى صفيفين من DataRows؟يحتوي كائن DataRow على خاصية RowState والتي ستمنحك ما تحتاجه.راجع مستندات MSDN: http://msdn.microsoft.com/

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top