.NET Tips and Tricks

Blog archive

Check for Changes Between Collections with SequenceMatch

You'd prefer not to execute any update code more often than you absolutely have to. If you only have one object to deal with, checking to see if an update is required is simple: retrieve the corresponding object from the database, check to see if the two objects have different values in their properties, and update the database only if there is a difference.

However, the problem is more complicated if you have a collection of objects to update in your application and in the database. With two collections, you can check for differences between the objects that appear in both collections. But you'll also need to check if the collections have missing or added objects. Fortunately, SequenceEqual can do all those checks for you, returning false if the two sequences don't have the same elements or if matching elements are different.

There are two wrinkles here, though. The first is that the two collections must be sorted the same way. This example sorts two collections by ID and then calls the SequenceEqual method on one collection, passing the other collection to determine if an update is required:

Dim usrs = (From cu In context.CompanyUsers
            Order By cu.ID
            Select cu).ToList
Dim updatedUsrs = (From us In ChangedUsers
                   Order By us.ID
                   Select us).ToList
If Not usrs.SequenceEqual(updatedUsrs) Then
    '…do update
End If

The second wrinkle requires some code. SequenceEqual doesn't actually compare the properties in the two objects: it just checks that the lists reference the same objects. If you've retrieved the objects from two sources (for example, if your application generated one set and the other set comes from your database), SequenceEqual will always return False. Fortunately, to get SequenceEqual to check the values of your object's properties you just need to have your classes implement the IEquatable interface, which I described in an earlier tip.

Posted by Peter Vogel on 08/08/2013 at 1:36 PM


comments powered by Disqus

Featured

  • New Visual Studio Razor Editor 'Close to Being Ready' for Blazor and Other Projects

    The experimental Razor editor for Visual Studio introduced last summer has been updated and is "close to being ready for normal daily development."

  • Microsoft Updates 'Must Have' Xamarin Community Toolkit

    The Xamarin Community Toolkit provides all kinds of effects, views and helpers to complement mobile app development with Microsoft's recently released, open source, cross-platform Xamarin.Forms 5.

  • JetBrains Unveils Plans for WinForms, WPF and More in Rider .NET IDE

    JetBrains announced plans for Windows Forms, Windows Presentation Foundation (WPF), ASP.NET and more tooling in the next release of its popular Rider IDE for .NET development.

  • Multi-Class Classification Using PyTorch: Model Accuracy

    Dr. James McCaffrey of Microsoft Research continues his four-part series on multi-class classification, designed to predict a value that can be one of three or more possible discrete values, by explaining model accuracy.

Upcoming Events