Я делаю проект для учебы.Во время создания поисковой системы для моего приложения я заканчивал следующим кодом:
public List<Document> FindDocument(string docName, Company company,
Department departament, Worker worker,
DateTime? enterDate, DateTime? expDate,
State state)
{
IQueryable<Document> query = context.Documents
.Include(p => p.Department)
.Include(p => p.Company)
.Include(p => p.State)
.Include(p => p.Workers);
if (docName != null)
query.Where(p => p.DocumentName.Contains(docName));
if (company != null)
query.Where(p => p.Company.Equals(company));
if (departament != null)
query.Where(p => p.Department.Equals(departament));
if (worker != null)
query.Where(p => p.Workers.Contains(worker));
if (enterDate.HasValue)
query.Where(p => p.EnterDate.Equals(enterDate.Value));
if (expDate.HasValue)
query.Where(p => p.ExpDate.Equals(expDate.Value));
if (state != null)
query.Where(p => p.State.Equals(state));
return query.ToList();
}
Критерии поиска являются необязательными, поэтому мне нужно проверить, является ли какой-либо из критериев пустымиПриложение выполнено так, что если этот критерий не используется, то его значение равно нулю.
Проблема этого запроса в том, что он всегда возвращает все документы, а не только документы, удовлетворяющие критериям.Я проверил с отладчиком во время выполнения, чтобы убедиться, что если указано значение, то тело оператора if
будет оценено.