Конечно, есть много способов решить эту проблему, и моя первая попытка не сработала.
Так как возвращаемое выражение не может использовать локальную функцию или оператор нулевого распространения, старый тест может подойти:
private Expression<Func<ProductDto, bool>> FilterData(ProductRequest searchQuery)
{
string searchString = !string.IsNullOrEmpty(searchQuery.SearchString)
? searchQuery.SearchString.ToLower()
: string.Empty;
return f => string.IsNullOrEmpty(searchString)
|| (!string.IsNullOrEmpty(f.ProductName) && f.ProductName.ToLower().Contains(searchString))
|| (!string.IsNullOrEmpty(f.ParentProductName) && f.ParentProductName.ToLower().Contains(searchString));
}
Я использовал ту же сигнатуру функции, что и вы, и компилятор, похоже, рад этому, хотя она определенно выглядит загроможденной.
Обязательно настройте первую часть return
чтобы отразить, что делать, если строка поиска пуста: та, которую я использовал, предполагает, что пустая строка поиска соответствует всему - редактировать по вкусу.