2009-04-29 10 views
0

私は、アドホック・クエリ画面をサポートするためにSqlQueryを構築しています。私はこのような何かしたいSubSonic 2.1 SqlQuery multiple Where()s?

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

を私の問題がある - 取り付け、複数の場合は()sが動作するようには思えない - 正しいということでしょうか?

今、私はこれを書いていますが、それはかなり醜いです。

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

このシナリオでは、より良いイディオムがあることを教えてください。ありがとう!

答えて

1

常に真と評価される場所でクエリを開始してください。

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

次に、残りのクエリをq.Andで構築します。 this threadも参照してください。

+0

thanks ranomore。うん、私は古いSQLのトリックを忘れてしまった。私はそれもクエリのセマンティクスには貢献していないという点で少し醜いと思うが、それは私のやり方よりも醜いものだ。あなたがリンクしているスレッドのポスターのように、私はAddWhere()に何が起こったのだろうか.... –