Я создаю свою собственную реализацию IQueryable для стороннего API.
Этот API принимает фильтры в виде списка OR, содержащего список операторов AND, и фильтрует их соответствующим образом. , вот так:
Код: Выделить всё
public class Or
{
List ands
}
public class And
{
field, operator, value..
}
Filters = new List();
Теперь создание этих фильтров проходит нормально: всякий раз, когда у меня есть оператор или, я разбиваю все текущие фильтры по или, и всякий раз, когда я получаю оператор и, я добавляю его ко всем операторам или. Кажется, они работают нормально, но теперь, когда у меня есть унарное выражение not для нескольких полей, я теряюсь.
Скажем, у меня есть: (a и b) или (c и d)
Скажем, у меня есть: (a и b) или (c и d) code>
Это превратится в фильтры:
Код: Выделить всё
a, b // list of ands, vertical list of or
c, d
Отрицание этого приведет к: (!a или !b) и (!c или !d)
Это все еще возможно, но я пытаюсь понять, как я смогу вернуть это, если оно будет дважды инвертировано, что приведет к (a и б) или (в и г) еще раз. Но я не могу этого понять. Возможно, мне следует использовать другую структуру промежуточного фильтра, прежде чем превращать их в эти и/или списки. Как я смогу этого добиться?
Подробнее здесь:
https://stackoverflow.com/questions/496 ... ld-filters