Одна приятная вещь, которую вы можете сделать с помощью LINQ, - разбить ваши запросы на несколько частей. Поскольку вы строите дерево выражений, которое не будет выполнено до тех пор, пока не будут перечислены результаты, вам не нужно делать все это в одной строке (например, SQL).
Вы даже можете создать несколько «повторно используемых» «фильтров», которые вы можете применить к IQueryable. Эти функции фильтра принимают IQueryable в качестве аргумента и возвращают его в качестве результата. Вы можете создать их как методы расширения, если хотите (мне нравится).
Что касается вашей непосредственной проблемы, вы можете попробовать присоединиться к _secretariat вместо попытки подзапроса. Я видел, как они работают в сценариях, где подзапросы не работают.