11

Dapper 用に SqlBuilder の Where メソッドと OrWhere メソッドを使用しようとしましたが、期待どおりに動作しません。

この質問の編集された部分は、基本的に私が遭遇したものです。返事がないのでこちらで質問させていただきます。

var builder = new SqlBuilder();
var sql = builder.AddTemplate("select * from table /**where**/ ");
builder.Where("a = @a", new { a = 1 })
        .OrWhere("b = @b", new { b = 2 });

期待したselect * from table WHERE a = @a OR b = @b

しかし、私は得ましたselect * from table WHERE a = @a AND b = @b

SqlBuilder を使用して where 句に OR を追加する方法はありますか?

SqlBuilder クラスの以下を AND ではなく OR に変更するだけの問題だと思いますが、確認したかったのです。

public SqlBuilder OrWhere(string sql, dynamic parameters = null)
{
    AddClause("where", sql, parameters, " AND ", prefix: "WHERE ", postfix: "\n", IsInclusive: true);
    return this;
}
4

3 に答える 3

9

どうでも。SqlBuilder コードを調べたところ、Where と OrWhere が混在している場合、次のようになることがわかりました。

  • すべての AND 句を結合します
  • すべての OR 句を個別に結合する
  • AND 句の最後に OR 句を追加します。

OrWhere が 1 つしかない場合、OR は表示されません。

これを考慮してクエリ ロジックを変更します。

于 2015-07-22T18:53:08.827 に答える