Find a list of Windows Services by given criteria
These are my suggestions:


Get rid of all the ugly and duplicate ifs by replacing them with two dictionaries where each one returns a Func.
Use Regex for all searching criteria by creating appropriate patterns or returning the SearchString if it's the pattern.


Example:

var propertygGetters = new Dictionry&lt;SearchServiceBy, Func&lt;Service, string&gt;&gt;
{
    [SearchServiceBy.ServiceName] =&gt; s =&gt; s.ServiceName,
    ...
}

var patternCreators = new Dictionry&lt;SearchOption, Func&lt;string, string&gt;&gt;
{
    [SearchOption.Equals] =&gt; s =&gt; $"^{s}$",
    [SearchOption.Contains] =&gt; s =&gt; $"{s}",
    [SearchOption.StartsWith] =&gt; s =&gt; $"^{s}",
    [SearchOption.EndsWith] =&gt; s =&gt; $"{s}$",
    [SearchOption.Regex] =&gt; s =&gt; s,
}

var getProperty = searchStringGetters[SearchServiceBy];
var createPattern = patternCreators[SearchOption];

var pattern = createPattern(SearchString);

return 
    allServices
        .Where(service =&gt; Regex.IsMatch(getProperty(service), pattern))
        .ToList();


(warning: notepad programming)