Вы можете рассчитать количество перестановок, умножив различные параметры для каждого фильтра. В вашем случае это дает вам 2 * 2 * 3 = 12
перестановок (два варианта для searchTitle
, два для searchLocation
, три для фильтров времени).
Что касается работы с этими перестановками, если Эффект фильтра должен быть одинаковым независимо от других активных фильтров, вы можете воспользоваться тем, что вы можете фильтровать перечисляемый объект в нескольких отдельных вызовах Where
, каждый из которых применяет дополнительную фильтрацию к набору результатов.
Учитывая мою интерпретацию намерения вашего кода, я придумал следующее:
[HttpGet]
public ActionResult SearchResult(
int? page,
string searchTitle = "",
string searchLocation = "",
string last24 = "",
string last3Days = "")
{
setUpApi(searchTitle, searchLocation);
var result = db.AllJobModel;
// Search filters
if (!string.IsNullOrEmpty(searchTitle))
{
result = result.Where(a => a.JobTitle.Contains(searchTitle));
}
if (!string.IsNullOrEmpty(searchLocation))
{
result = result.Where(a => a.locationName.Contains(searchLocation));
}
// Time filters
var hasTimeFilter = !(string.IsNullOrEmpty(last24) && string.IsNullOrEmpty(last3Days));
if (hasTimeFilter)
{
var numberOfAdditionalDays = string.IsNullOrEmpty(last24) ? 3 : 1;
var totalValidDays = 1 + numberOfAdditionalDays;
var now = DateTime.Now;
var validDays = Enumerable.Range(0, totalValidDays).
Select(i => now.AddDays(-1 * i).ToString("dd/MM/yyyy")).
ToList();
result = result.Where(a => validDays.Contains(a.PostedDate));
}
return View(result.ToList().ToPagedList(page ?? 1, 5));
}
Выше может быть не совсем то, что вам нужно, так как я изменил некоторые логические логики c на то, что я думаю вы пытались сделать, и пропустили повторный вызов setUpApi(searchTitle, searchLocation)
, но его должно быть достаточно легко изменить в соответствии с вашими требованиями.