Вы можете использовать IEqualityComparer
интерфейс:
public class EqualityComparer : IEqualityComparer<string>
{
public bool Equals(string x, string y)
{
return y.Contains(x);
}
public int GetHashCode(string obj)
{
return obj.GetHashCode();
}
}
Тогда используйте его:
HashSet<string> searchList = new HashSet<string>();
searchList.Add("abc");
searchList.Add("def");
var list = new Dictionary<string, int>();
list.Add("abcd", 1);
list.Add("abc", 12);
list.Add("def abc", 14);
list.Add("test test", 15);
var lst = list.Where(p => searchList.Contains(p.Key, new EqualityComparer()));
Как @Ani сказал, что это равенство не хорошо, вы можететакже выполните:
var lst1 = list.Where(p => searchList.Any(x => p.Key.Contains(x)));
Просто добавьте нулевые проверки самостоятельно.