2009-04-29 8 views
0

Ich baue eine SqlQuery zur Unterstützung eines Ad-hoc-Abfrage-Bildschirm.SubSonic 2.1 SqlQuery mehrere Where() s?

Ich möchte etwas wie folgt aus:

SqlQuery q = new Select().From<VwInstitutes>(); 
if (!string.IsNullOrEmpty(username)) 
{ 
    q.Where(VwInstitutes.Columns.AssignedUser).IsEqualTo(username); 
} 

if (!string.IsNullOrEmpty(stage)) 
{ 
    q.Where(VwInstitutes.Columns.Stage).IsEqualTo(stage); 
} 

Mein Problem ist - mehrere Befestigungs Wo() s nicht zu funktionieren scheint - ist das richtig?

Also jetzt schreibe ich das, aber es ist ziemlich hässlich.

if (!string.IsNullOrEmpty(username)) 
{ 
    if (q.HasWhere) q.And(VwInstitutes.Columns.AssignedUser).IsEqualTo(username); 
    else q.Where(VwInstitutes.Columns.AssignedUser).IsEqualTo(username); 
} 

if (!string.IsNullOrEmpty(stage)) 
{ 
    if (q.HasWhere) q.And(VwInstitutes.Columns.Stage).IsEqualTo(stage); 
    else q.Where(VwInstitutes.Columns.Stage).IsEqualTo(stage); 
} 

Bitte sagen Sie mir, dass es ein besseres Idiom für dieses Szenario gibt. Vielen Dank!

Antwort

1

Starten Sie Ihre Abfrage mit einem, wo das immer als wahr ausgewertet wird.

new Select().From().Where("1").IsEqualTo("1"); 

dann erstellen Sie den Rest der Abfrage mit q.And. Siehe auch this thread.

+0

danke ranomore. Ja, ich habe diesen alten Trick vergessen. Ich denke, es ist auch ein bisschen hässlich - insofern trägt es nicht zur Semantik der Abfrage bei - aber es ist WENIGER hässlich als das, was ich tat. Wie das Poster in dem Thread, mit dem du verlinkt bist, frage ich mich, was mit AddWhere() passiert ist .... –