Ниже приведен пример грубого и упрощенного кода того, что я пытаюсь сделать, и он работает не так, как ожидалось. Я использую Linq для Entity в случае, если это имеет значение.
По сути, первый цикл с DateClause заканчивается тем, что ничего не возвращает, если у меня есть два предложения date, отлично работает с одним предложением date. В цикле TextClause он, кажется, игнорирует каждое текстовое предложение после первого.
Я ожидаю, что эти предложения будут объединены AND, поэтому, если я сделаю текстовое предложение, а затем сделаю другое, они должны быть добавлены, и я получу более сфокусированные результаты, особенно с использованием метода Contains.
Ожидания в отношении дат состоят в том, что я ожидал, что смогу сделать диапазон дат с этим, но если есть две даты, он всегда ничего не возвращает, хотя я знаю, что есть записи с правильными датами в диапазоне.
Я уверен, что делаю что-то не так или просто глупо, но не вижу этого.
enum Operators
{
Contains,
DoesNotContain,
GreaterThan,
LessThan
}
public void DoSomething(List<DateClauses> dateClauses, List<TextClauses> textClauses)
{
var query = from t in context.Table
where t.Enabled = true
select new
{
title = t.title
date = t.date
}
foreach (DateClause clause in dateClauses)
{
switch (clause.Operator)
{
case Operator.GreaterThan:
query = query.Where(l => l.date > clause.Date);
break;
case Operator.LessThan
query = query.Where(l => l.date < clause.Date);
break;
}
}
foreach (TextClause clause in textClauses)
{
switch (clause.Operator)
{
case Operator.Contains:
query = query.Where(l => l.title.Contains(clause.Text));
break;
case Operator.DoesNotContain
query = query.Where(l => !l.title.Contains(clause.Text));
break;
}
}
}
РЕДАКТИРОВАТЬ: обновленный пример кода, чтобы показать использование enum в процессе. Когда я экстраполировал использование перечисления на некоторые из очень хороших решений (которые иначе работали бы с bool), я вызвал исключение, указанное в комментарии от меня в ответе Джоэла.
Я хочу сказать, что мне нравится то, что я видел в ответах, и я выучил несколько новых трюков с Linq, извиняюсь за пример, так как не думал, что bool vs enum будет иметь большое значение для Linq. Я надеюсь, что изменения помогут найти решение, которое может работать на меня. Еще раз спасибо за замечательные ответы на сегодняшний день.