I'd say that in the C# world, an enum would be one of the best options here.
With that you'd be forced to spell out what you're doing and any user would see whats happening. It's also safe for future extensions;
public enum WhatToInclude
{
IncludeAll,
ExcludeManagement
}
var ids = ReturnEmployeeIds(WhatToInclude.ExcludeManagement);
So, in my opinion here:
enum > optional enum > optional bool
Edit:
Due to discussion with LeopardSkinPillBoxHat below regarding a [Flags] enum which in this specific case might be a good fit (since we specifically are talking about including/excluding things), I instead propose using ISet<WhatToInclude> as a parameter.
It's a more "modern" concept with several advantages, mostly stemming from the fact that it fits in the LINQ family of collections, but also that [Flags] has a maximum of 32 groups. The main downside of using ISet<WhatToInclude> is how badly sets are supported in C# syntax:
var ids = ReturnEmployeeIds(
new HashSet<WhatToInclude>(new []{
WhatToInclude.Cleaners,
WhatToInclude.Managers});
Some of it might be mitigated by helper functions, both for generating the set and for creating "shortcut sets" such as
var ids = ReturnEmployeeIds(WhatToIncludeHelper.IncludeAll)