El uso de Contains en LINQ - IN or NOT IN en SQL

Hay veces en las que desarrollando una aplicación Software, nos interesa obtener los elementos de una colección que contienen o que no contienen un conjunto de elementos.
Para ello, en LINQ hacemos uso de la extensión Contains.
De cara a SQL, esto sería similar a la instrucción que ejecutamos con la palabra IN.
SELECT * FROM Tabla WHERE campo NOT IN ('', '', ...)
La mejor forma de entender bien el funcionamiento de Contains, es verlo con un ejemplo.
El siguiente ejemplo es únicamente demostrativo y esta escrito en C#.
Comenzamos por crear una clase muy simple de productos frutales por decir algo:
public class Product
{
public string fruit { get; set; }
}
Y finaliza con el código de ejemplo demostrativo de LINQ y Contains:
string[] fruits = new string[] { "Peras", "Platanos" };
List<Product> productsCollection = new List<Product>();
productsCollection.Add(new Product() { fruit = "Naranjas" });
productsCollection.Add(new Product() { fruit = "Peras" });
productsCollection.Add(new Product() { fruit = "Limones" });
productsCollection.Add(new Product() { fruit = "Platanos" });
var productElements = from element in productsCollection
where !(fruits.Contains(element.fruit.ToString()))
select element;
productsCollection = productElements.ToList();
foreach (var item in productsCollection)
{
MessageBox.Show(item.fruit);
}
Como podemos ver en este ejemplo, creamos una colección de frutas y una matriz con el nombre de dos frutas.
Lo que queremos obtener son todas las frutas que no estan contenidas en la matriz.
Es decir, todas las frutas que no son ni Peras ni Platanos.
En SQL estándar serían las frutas NOT IN ('Peras', 'Platanos').
Adicionalmente, también podemos hacer uso de las funciones Lambda, por lo que todo el funcionamiento anterior, se resumiría de la siguiente manera (equivalente de la anterior):
string[] fruits = new string[] { "Peras", "Platanos" };
List<Product> productsCollection = new List<Product> {
new Product { fruit="Naranjas" },
new Product { fruit="Peras" },
new Product { fruit="Limones" },
new Product { fruit="Platanos" }
};
productsCollection = productsCollection.Where((n) => !(fruits.Contains(n.fruit.ToString()))).ToList();
foreach (var item in productsCollection)
{
MessageBox.Show(item.fruit);
}
Espero que quede clara (para quien lo necesite) la funcionalidad, beneficios y usos de Contains en LINQ.