2009-06-04 11 views
0

ich ein paar Probleme habe mit dem Versuch, in einer Unterschall Welt zu leben und ein Subsonic-Mädchen zu sein, wenn es um Unterschall Ausdrücke kommt ....Subsonic dynamischer Abfrageausdruck

nach Subsonic Query (ConditionA OR ConditionB) AND ConditionC liest es scheint, ich bin nicht die nur einer mit dieser Art von Problem, aber hoffentlich jemand (der Allmächtige rauben ??) kann dies beantworten.

Ich versuche, einen Ausdruck in meiner Abfrage basierend auf einer Schleifenbedingung zu erstellen. was ich (in Pseudo-Code) erreichen will, so etwas wie diese:

objQuery.andexpressionstart(); 

foreach (condition in conditions){ 

    if (condition){ 
     objQuery.and(conditionColumn).isequalto(X); 
    } 

} 
objQuery.expressionstop(); 

mein Hauptproblem ist, dass jede Bedingung, die im Innern des Ausdrucks ist eine andere Spalte ist - sonst könnte ich nur .In() verwenden. Ich habe auch zusätzliche Suchkriterien (lesen Sie ein gutes Stück) draußen, so dass es nicht außerhalb eines Ausdrucks sein kann.

WIRKLICH möchte ich nicht die warme coseyness der stark typisierten-subsonic Gebärmutter verlassen, aber ich denke in diesem Fall könnte ich auch haben ... wenn ich muss, gibt es eine Möglichkeit, zu einem Unterschall hinzuzufügen Abfrage mit einer Hand getippt Zustand so alle anderen Code in der Abfrage (jetzt eine Menge von Business-Logik wohnhaft in Unterschall Land) nicht ändern, ich muss

Wie immer, vielen dank für jede Hilfe prost

Antwort

3

Ich habe nicht die Zeit, dies jetzt zu testen, aber ich denke, wenn Sie etwas tun, wie das folgende sollte funktionieren:

bool isFirstCondition = true; 

foreach (condition in conditions){ 

    if (condition)  
    { 
     if(isFirstCondition) 
     { 
      objQuery.AndExpression(conditionColumn).isequalto(X); 
      isFirstCondition = false; 
     } 
     else 
     { 
      objQuery.and(conditionColumn).isequalto(X); 

     } 
    } 

} 

Stellen Sie sicher, dass alle anderen Bedingungen vor der Schleife hinzugefügt wurden.

+0

Ich habe ein Problem in der Tatsache, dass ich mehr als einen "Ausdruck" habe – Doug

+1

mein Verständnis ist, dass, wenn Sie "AndExpression" verwenden wird alles gruppiert, bis die nächste "AndExpression" aufgerufen wird. (erster Ausdruck und (zweiter Ausdruck und (dritter Ausdruck))) wobei jeder Ausdruck eine beliebige Anzahl von Kriterien enthalten kann. Probieren Sie es aus und überprüfen Sie, was SQL generiert wird. – ptutt

+0

Das obige funktioniert super! ... tolle Arbeit, danke :) – Doug