Проблема в том, что вы материализуете запрос, используя метод FilterBySearchTerm
.EF не может преобразовать случайные методы в SQL, поэтому он должен пойти дальше и выполнить запрос, получить результаты обратно, а затем применить Where
.EF на самом деле генерировал исключение в прошлом, но EF Core обрабатывает это молча.
В любом случае, как только запрос будет выполнен, все готово.Ваша фильтрация происходит в памяти, и в этот момент без Include
ваши связанные сущности не будут там работать.Короче говоря, вам нужно построить свой фильтр на месте (а не использовать отдельный метод), чтобы EF смог перевести его на SQL.
Альтернативный подход, который может вам лучше помочь, этопередать запрос к вашему FilterBySearchTerm
методу.Например, вместо того, чтобы делать:
query = query.Where(c => FilterBySearchTerm(c, searchTerm));
Do
query = FilterBySearchTerm(query, searchTerm);
Затем внутри FilterBySearchTerm
вы можете напрямую применять предложения Where
к переданному запросу.Это позволяет вам создавать фактический запрос, который EF может понять, и в то же время инкапсулировать логику.