我试图为Dapper使用SqlBuilder的Where和SqlBuilder方法,但这并不像我所期望的那样。
这个问题的编辑部分基本上就是我遇到的部分。既然没有收到回复,我就在这里问。
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类中的以下内容改为OR而不是AND,但我想确认一下。
public SqlBuilder OrWhere(string sql, dynamic parameters = null)
{
AddClause("where", sql, parameters, " AND ", prefix: "WHERE ", postfix: "\n", IsInclusive: true);
return this;
}发布于 2015-07-22 18:53:08
不要紧。我查看了SqlBuilder代码,发现如果存在Where和OrWhere的混合,它将执行以下操作:
如果您没有超过1 OrWhere,那么您将看不到任何OR。
我将修改我的查询逻辑以考虑到这一点
发布于 2017-11-08 09:27:38
您必须将查询更改为:
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 });发布于 2020-08-07 23:30:14
如果您想尝试另一种选择,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**).。
您不必手动管理参数字典.
免责声明:我是这个图书馆的作者之一
https://stackoverflow.com/questions/31442086
复制相似问题