Maybe I’m late to the party, but I just found the Except() LINQ extension method. I knew I loved .NET!
For those of you familiar with set theory, this returns the “difference” between two collections. In my case, I needed to append a set of items to an existing collection, but only if they’re not already in the target collection. This thing was just what I needed.
Here’s the definition:
//
// Summary:
// Produces the set difference of two sequences by using the default equality
// comparer to compare values.
//
// Parameters:
// first:
// An System.Collections.Generic.IEnumerable<T> whose elements that are not
// also in second will be returned.
//
// second:
// An System.Collections.Generic.IEnumerable<T> whose elements that also occur
// in the first sequence will cause those elements to be removed from the returned
// sequence.
//
// Type parameters:
// TSource:
// The type of the elements of the input sequences.
//
// Returns:
// A sequence that contains the set difference of the elements of two sequences.
//
// Exceptions:
// System.ArgumentNullException:
// first or second is null.
public static IEnumerable<TSource> Except<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second);
Couple this with the ToList() and ForEach() extension method, and you can do this work in about 2 lines of code. Love it!
Cheers!