Dapper SqlBuilder OrWhere使用AND而不是OR

Fam*_*ama 7 sqlbuilder dapper

我试图使用SqlBuilder的Where和OrWhere方法来实现Dapper,但它的表现并不像我期望的那样.

这个问题的编辑部分基本上是我遇到的.由于它没有得到答复,我会在这里问.

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 });
Run Code Online (Sandbox Code Playgroud)

我期望 select * from table WHERE a = @a OR b = @b

但我明白了 select * from table WHERE a = @a AND b = @b

有没有办法使用SqlBuilder向where子句添加OR?

我认为只需要在SqlBuilder类中更改以下内容来表示OR而不是AND,但我想确认一下.

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

Fam*_*ama 6

没关系.我查看了SqlBuilder代码,发现如果有Where和OrWhere的混合,它将执行以下操作:

  • 加入所有AND条款
  • 分别加入所有OR子句
  • 使用AND附加AND子句末尾的OR子句

如果你没有超过1个OrWhere,那么你将看不到任何OR.

我将修改我的查询逻辑以考虑到这一点