Dapper SqlBuilder OrWhere 使用 AND 而不是 OR
Dapper SqlBuilder OrWhere using AND instead of OR
我尝试使用 SqlBuilder for Dapper 的 Where 和 OrWhere 方法,但它并不像我期望的那样。
this question 的编辑部分基本上是我 运行 的内容。由于没有收到回复,我就在这里问一下。
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 class 中的以下内容更改为 OR 而不是 AND,但我想确认一下。
public SqlBuilder OrWhere(string sql, dynamic parameters = null)
{
AddClause("where", sql, parameters, " AND ", prefix: "WHERE ", postfix: "\n", IsInclusive: true);
return this;
}
没关系。我查看了 SqlBuilder 代码,发现如果 Where 和 OrWhere 混合存在,它会执行以下操作:
- 加入所有的AND子句
- 分别加入所有的OR子句
- 用 AND
在 AND 子句末尾附加 OR 子句
如果您没有超过 1 个 OrWhere,那么您将看不到任何 OR。
我将修改我的查询逻辑以考虑到这一点
您必须将查询更改为:
var builder = new SqlBuilder();
var sql = builder.AddTemplate("select * from table /**where**/ ");
builder.OrWhere("a = @a", new { a = 1 })
.OrWhere("b = @b", new { b = 2 });
如果您想尝试其他选择,DapperQueryBuilder 可能更容易理解:
var query = cn.QueryBuilder($@"
SELECT *
FROM table
/**where**/
");
// by default multiple filters are combined with AND
query.FiltersType = Filters.FiltersType.OR;
int a = 1;
int b = 2;
query.Where($"a = {a}");
query.Where($"b = {b}");
var results = query.Query<YourPOCO>();
输出完全参数化SQL (WHERE a = @p0 OR b = @p1
)。
您不必手动管理参数字典。
免责声明:我是该库的作者之一
我尝试使用 SqlBuilder for Dapper 的 Where 和 OrWhere 方法,但它并不像我期望的那样。
this question 的编辑部分基本上是我 运行 的内容。由于没有收到回复,我就在这里问一下。
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 class 中的以下内容更改为 OR 而不是 AND,但我想确认一下。
public SqlBuilder OrWhere(string sql, dynamic parameters = null)
{
AddClause("where", sql, parameters, " AND ", prefix: "WHERE ", postfix: "\n", IsInclusive: true);
return this;
}
没关系。我查看了 SqlBuilder 代码,发现如果 Where 和 OrWhere 混合存在,它会执行以下操作:
- 加入所有的AND子句
- 分别加入所有的OR子句
- 用 AND 在 AND 子句末尾附加 OR 子句
如果您没有超过 1 个 OrWhere,那么您将看不到任何 OR。
我将修改我的查询逻辑以考虑到这一点
您必须将查询更改为:
var builder = new SqlBuilder();
var sql = builder.AddTemplate("select * from table /**where**/ ");
builder.OrWhere("a = @a", new { a = 1 })
.OrWhere("b = @b", new { b = 2 });
如果您想尝试其他选择,DapperQueryBuilder 可能更容易理解:
var query = cn.QueryBuilder($@"
SELECT *
FROM table
/**where**/
");
// by default multiple filters are combined with AND
query.FiltersType = Filters.FiltersType.OR;
int a = 1;
int b = 2;
query.Where($"a = {a}");
query.Where($"b = {b}");
var results = query.Query<YourPOCO>();
输出完全参数化SQL (WHERE a = @p0 OR b = @p1
)。
您不必手动管理参数字典。
免责声明:我是该库的作者之一