JavaScript:
string[] fruits = { "teststrawberrytest", "apple", "strawberrytest", "aSTRawberrytest", "apricot", "banana", "strawberry" };
string[] search = { "strawberry", "apricot" };
//*1* - any item EQUALS (case insensitive)
var found = fruits.Where(fruit => search.Any(s => fruit.Equals(s, StringComparison.OrdinalIgnoreCase))).ToList();
foreach (string x in found)
Console.WriteLine(x);
//apricot
//strawberry
//*2* - any item EQUALS (case insensitive)
found = fruits.Intersect(search, StringComparer.OrdinalIgnoreCase).ToList();
foreach (string x in found)
Console.WriteLine(x);
//apricot
//strawberry
//*3* - any item CONTAINS (case sensitive only)
found = fruits.Where(fruit => search.Any(s => fruit.Contains(s))).ToList();
foreach (string x in found)
Console.WriteLine(x);
//teststrawberrytest
//strawberrytest
//apricot
//strawberry
//*4* - any item CONTAINS (case insensitive)
found = fruits.Where(fruit => search.Any(s => fruit.IndexOf(s, StringComparison.OrdinalIgnoreCase) > -1)).ToList();
foreach (string x in found)
Console.WriteLine(x);
//teststrawberrytest
//strawberrytest
//aSTRawberrytest
//apricot
//strawberry
Except / Intersect / Union / Concat explained
https://csharpsage.com/linq-except-get-items-not-in-another-list/
Intersect with Complex Type
https://dotnettutorials.net/lesson/linq-intersect-method/
Except Comparer
https://mariusschulz.com/blog/why-enumerable-except-might-not-work-the-way-you-might-expect