2009-04-29 5 views
0

Je crée un SqlQuery pour prendre en charge un écran de requête ad-hoc.SubSonic 2.1 SqlQuery multiple Où() s?

Je veux quelque chose comme ceci:

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); 
} 

Mon problème est - la fixation multiple where() s ne semble pas fonctionner - est-ce exact?

Alors maintenant j'écris ceci, mais c'est plutôt moche.

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); 
} 

Dites-moi s'il vous plaît qu'il existe un meilleur idiome pour ce scénario. Merci!

Répondre

1

Commencez votre requête avec un où cela est toujours vrai.

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

puis de générer le reste de la requête avec q.And. Voir aussi this thread.

+0

merci ranomore. Oui, j'ai oublié ce vieux truc de sql. Je pense que c'est un peu moche aussi - en ce sens qu'il ne contribue pas à la sémantique de la requête - mais c'est MOINS moche que la façon dont je le faisais. Comme l'affiche dans le fil que vous avez lié, je me demande ce qui est arrivé à AddWhere() .... –

Questions connexes