Прокатитесь на combine
Func, это вам не поможет. Вы не должны компилировать свое выражение, если вы действительно хотите вернуть запрос.
Что вы могли бы сделать:
Expression<Func<Course, bool>> expression = c => (string.IsNullOrEmpty(Title) || EF.Functions.Like(c.CourseTitle, $"%{Title}%")
&& c.IsDeleted == IsDeleted);
switch (statusType)
{
case PriceStatusType.All:
break;
case PriceStatusType.Free:
queryable = queryable.Where(expression).Where(c => c.CoursePrice < 1000);
break;
case PriceStatusType.Cash:
queryable = queryable.Where(expression).Where(c => c.CoursePrice <= MaxPrice && c.CoursePrice >= MinPrice);
break;
}
if (SelectedGroup != null && SelectedGroup.Any())
{
Expression<Func<Course, bool>> e = c => SelectedGroup.Contains(c.CourseGroup.Id);
queryable = queryable.Where(expression);
queryable = queryable.Where(c => SelectedGroup.Contains(c.CourseGroup.Id));
}
return queryable;
Кроме того, я удалил «Включить», поскольку он бесполезен и должен использоваться вызывающим абонентом, если это необходимо.