Sometimes you want to use a Difference (or Minus) set operation which goes like this: Give me all elements from set A that do not exist in set B.  Or simply put A – B.  The LINQ Except method does this if both sets A and B are of the same type, but frequently the sets are of different types and must have their identifiers matched.  Here is a quick little example of how to do this with LINQ.

Wolfram MathWorld shows the operation’s definition as:

`static void Main(string[] args)`
`{`
`  List<string> names = new List<string>`
`  { "Noah", "Sarah", "Josiah", "Craig", "Carolin" };`
` `
`  Dictionary<string, string> visiting = new Dictionary<string, string>()`
`  { { "Noah", "Turkey" }, { "Craig", "Germany" }, { "Sue", "Bangalore" } };`
` `
`  var minus =`
`    from n in names`
`    let places = from p in visiting select p.Key`
`    where !places.Contains(n)`
`    select n;`
` `
`  foreach (var v in minus)`
`    Console.WriteLine(v);`
` `
`  Console.ReadKey();`
`}`

Output:

```Sarah
Josiah
Carolin```

The dot notation way of doing this would be "names.Where(a => !visiting.Select(b => b.Key).Contains(a))".  I realize this all seems to be relatively trivial for one familiar with LINQ, but at the time of writing this there isn’t a decent topic popping up on Bing or Google when searching for LINQ Minus C# with two types of sets, now hopefully there will be. If you know of a more efficient way, please by all means post a comment, thanks.

References