Посетитель C# Expression, как отменить фильтры сборкиC#

Место общения программистов C#
Ответить
Anonymous
 Посетитель C# Expression, как отменить фильтры сборки

Сообщение Anonymous »

Я создаю свою собственную реализацию 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, !c
!a, !d
!b, !c
!b, !d
Это все еще возможно, но я пытаюсь понять, как я смогу вернуть это, если оно будет дважды инвертировано, что приведет к (a и б) или (в и г) еще раз. Но я не могу этого понять. Возможно, мне следует использовать другую структуру промежуточного фильтра, прежде чем превращать их в эти и/или списки. Как я смогу этого добиться?

Подробнее здесь: https://stackoverflow.com/questions/496 ... ld-filters
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»