Ich erstelle meine eigene IQueryable-Implementierung für eine API eines Drittanbieters.
Diese API akzeptiert Filter als Liste von ODERs, die eine Liste von UND-Anweisungen enthalten, und filtert entsprechend , so:
Code: Select all
public class Or
{
List ands
}
public class And
{
field, operator, value..
}
Filters = new List();
Jetzt funktioniert das Erstellen dieser Filter einwandfrei. Immer wenn ich eine Oder-Anweisung habe, explodiere ich alle aktuellen Filter über Oder, und wann immer ich eine Anweisung erhalte, füge ich diese zu allen Oder-Anweisungen hinzu. Diese scheinen gut zu funktionieren, außer dass ich mich jetzt verliere, wenn ich einen unären Not-Ausdruck über mehrere Felder habe.
Angenommen, ich habe: (a und b) oder (c und d)
Dies würde zu Filtern werden:
Code: Select all
a, b // list of ands, vertical list of or
c, d
Eine Negierung würde Folgendes zur Folge haben: (!a oder !b) und (!c oder !d)
Das wäre immer noch möglich, aber ich versuche herauszufinden, wie ich dies rückgängig machen könnte, wenn es doppelt negiert würde, was zu (a and b) oder (c und d) erneut. Aber ich kann es scheinbar nicht herausfinden. Vielleicht sollte ich eine andere Zwischenfilterstruktur verwenden, bevor ich sie in diese und/oder-Listen umwandele. Wie könnte ich das erreichen?