2009-06-18 16 views
2

Ich bin entweder für eine Best-Practice oder Bibliothek zur Verarbeitung von String in einen Objektbaum suchen ..C# Erweiterte Abfrage-Anweisung Stringverarbeitung

hier ist das Beispiel:

„[Alter]‚37‘= Und [Geschlecht] ist nicht Null und [optindate]> '2003/01/01' Und [idnumber] ist Null Und ([saresident] = '52' Oder [Staatsbürgerschaft] Wie 'abc%') "

I sollte in der Lage sein, dies in einen Baum so etwas zu objektivieren:

{attribute='age', operator='=', value='37', opperand='And'} 
{attribute='gender', operator='Is Not Null', value='', opperand='And'} 
{attribute='optindate', operator='>', value='2003/01/01', opperand='And'} 

usw. ....

alle Vorschläge wären großartig!

+0

Ich muss erwähnen, dass der Ausdruck verwendet wird, um Daten in einem EAV-Schema abzufragen (Bitte keine Kommentare)? Daher muss ich dies in einen ExpressionTree (oder etwas) einbauen, um dann die notwendigen SQL-Abfragen zu rekursieren und zu erstellen. –

Antwort

1

Wenn Sie die Vorgänge in einer Baumstruktur speichern müssen, sollten Sie die Postfix oder Präfixnotation verwenden. z.B. Alter = 37 und Geschlecht ist nicht null sollte als

und = 37 Jahre gespeichert werden! = Geschlecht null

so der Baum wie

 and 
    =   != 
age 37 gender null 

Sie diese Links nutzen können, um weitere Informationen sein sollten : Notation Used for Operations und Expressions, Conversion and Evaluation with C (All you need to know about Expressions)

+0

Laut meinem Kommentar habe ich leider keine Kontrolle über die Zeichenfolge, die der Filtercontrol zurückgibt? –

+1

Nein, ich schlage nicht vor, dass Sie die Saite ändern. Mein Vorschlag ist die Baumstruktur sollte Präfix-Notation verwenden. I.e. 'und' sollte root, '=' und '! =' children of 'und' und so weiter sein. Alle Operanden sollten die Blattknoten und Kinder der jeweiligen Operatoren sein. Wenn der Ausdruck ausgewertet werden soll, sollte der Baum dementsprechend analysiert werden. –

+0

Oh, großartig, ich werde es mir merken. Vielen Dank! –

1

Wie wäre es mit der dynamic LINQ library? Sie könnten entweder "so wie sie sind" verwenden oder sich ansehen, wie sie ein Expression<Func<T,bool>> Prädikat aufbaut (welches der Baum ist).

+0

Das Problem besteht darin, dass die Zeichenfolge von einem Propriatory-Filter-Steuerelement generiert wird. Ich muss den Stachel in etwas wie einen Ausdrucksbaum konvertieren? –

Verwandte Themen