Я хотел бы знать, возможно ли в предложении where просто вернуть все данные, когда отфильтрованное значение равно нулю.
У меня есть ViewModel с параметрами поиска, если они нулевые, я просто хочу всепричина в том, что данные должны быть возвращены, причина состоит в том, чтобы избежать повторения кода, используя предложения if, которые выглядят грязными из-за нулевой проверки.
Вот мой метод
public void OnPost()
{
if (POEViewModel.ReferenciaId != null)
{
POE = _context.Componentes
.Include(c => c.Registo)
.ThenInclude(r => r.Celula)
.Where(c =>
c.Registo.ReferenciaId == POEViewModel.ReferenciaId &&
c.Registo.DataInicioTurno >= POEViewModel.DataInicio && c.Registo.DataInicioTurno <= POEViewModel.DataFim)
.OrderByDescending(c => c.Id)
.ToList();
}
else if (POEViewModel.Operador != null)
{
POE = _context.Componentes
.Include(c => c.Registo)
.ThenInclude(r => r.Celula)
.Where(c =>
c.Registo.DataInicioTurno >= POEViewModel.DataInicio && c.Registo.DataInicioTurno <= POEViewModel.DataFim &&
c.Registo.Operador == POEViewModel.Operador)
.OrderByDescending(c => c.Id)
.ToList();
}
else if (POEViewModel.ReferenciaId != null && POEViewModel.Operador != null)
{
POE = _context.Componentes
.Include(c => c.Registo)
.ThenInclude(r => r.Celula)
.Where(c =>
c.Registo.ReferenciaId == POEViewModel.ReferenciaId &&
c.Registo.DataInicioTurno >= POEViewModel.DataInicio && c.Registo.DataInicioTurno <= POEViewModel.DataFim &&
c.Registo.Operador == POEViewModel.Operador)
.OrderByDescending(c => c.Id)
.ToList();
}
else
{
POE = _context.Componentes
.Include(c => c.Registo)
.ThenInclude(r => r.Celula)
.Where(c =>
c.Registo.DataInicioTurno >= POEViewModel.DataInicio && c.Registo.DataInicioTurno <= POEViewModel.DataFim)
.OrderByDescending(c => c.Id)
.ToList();
}
ViewData["ReferenciaId"] = new SelectList(_context.Referencias, "Id", "Nome");
}
Это может быть немного сложно для внешних ключей, потому что они принимают только целые числа, чтобы найти общее решение.