I have two lists
List<string> ingoreEducationKeywords= new List<string>(){"Uni", "School", "College",}; 
List<string> userEducation= new List<string>(){"MCS", "BCS", "School of Arts","College of Medicine"}; 
Now I want to get a list which has no substring from the ignore list.
require list {"MCS", "BCS"}
                        
It's a matter of phrasing what you want in a way that leads to a natural translation into LINQ:
userEducation (that suggests you'll start with userEducation)ignoreEducationKeywords are substrings.
ContainsThat leads to:
var query = userEducation
   .Where(candidate => !ignoredKeyWords.Any(ignore => candidate.Contains(ignore)));
The same thought process can help in many other queries.
Another option would be to create your own None extension method, assuming you're using LINQ to Objects:
public static class Extensions
{
    public static bool None(this IEnumerable<T> source, Func<T, bool> predicate)
        => !source.Any(predicate);
}
Then you could rewrite the query without the negation:
var query = userEducation
   .Where(candidate => ignoredKeyWords.None(ignore => candidate.Contains(ignore)));
                                
                            
                    See more on this question at Stackoverflow