У меня есть фильтр по некоторым проектам в моем приложении. Он работает с использованием запроса Expression, который в начале равен NULL.
Во время фильтрации существует много операторов IF, которые проверяют, имеет ли значение NULL запрос. Мне нужно избегать повторений, но проблема в том, что я не могу добавить условие, например query.And (exp), если query NULL.
Итак, перед добавлением условия - переменная запроса должна иметь значение. Моя первая идея - добавить условие и удалить его перед применением фильтра, но я не смог удалить его из тела, потому что это не строка, и я не нашел таких методов для него. Затем я попытался добавить условие, которое указывает фильтру принимать проекты с идентификатором, равным MAXINT, но это не работает, потому что тело запроса выглядит как {p => p.ID == 2147483647 И также}. Не ИЛИ, но И ТАКЖЕ. Таким образом, в результате получилось 0 проектов.
Expression<Func<Project, bool>> query = null, exp = null;
Вот как это работает сейчас в каждом операторе IF:
if (filter.ViewSomeProjects)
{
exp = p => (some conditions);
query = query != null ? query.And(exp) : exp;
}
Вот как я хочу, чтобы это работало:
if (filter.ViewSomeProjects)
{
query.And(some conditions);
}
Так что я не могу делать это так, как хочу, хотя запрос в начале равен NULL.
Мои вопросы: есть ли способ удалить часть тела выражения?
Можно ли добавить в выражение бесполезное условие, которое не повлияет на результат?