首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dapper SqlBuilder OrWhere使用和代替OR

Dapper SqlBuilder OrWhere使用和代替OR
EN

Stack Overflow用户
提问于 2015-07-15 22:11:44
回答 3查看 9K关注 0票数 11

我试图为Dapper使用SqlBuilder的Where和SqlBuilder方法,但这并不像我所期望的那样。

这个问题的编辑部分基本上就是我遇到的部分。既然没有收到回复,我就在这里问。

代码语言:javascript
复制
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,但我想确认一下。

代码语言:javascript
复制
public SqlBuilder OrWhere(string sql, dynamic parameters = null)
{
    AddClause("where", sql, parameters, " AND ", prefix: "WHERE ", postfix: "\n", IsInclusive: true);
    return this;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-22 18:53:08

不要紧。我查看了SqlBuilder代码,发现如果存在Where和OrWhere的混合,它将执行以下操作:

  • 加入所有和子句
  • 单独加入所有OR条款
  • 将OR子句附加在和子句的末尾,并加上

如果您没有超过1 OrWhere,那么您将看不到任何OR。

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

票数 9
EN

Stack Overflow用户

发布于 2017-11-08 09:27:38

您必须将查询更改为:

代码语言:javascript
复制
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 });
票数 2
EN

Stack Overflow用户

发布于 2020-08-07 23:30:14

如果您想尝试另一种选择,DapperQueryBuilder可能更容易理解:

代码语言:javascript
复制
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**).

您不必手动管理参数字典.

免责声明:我是这个图书馆的作者之一

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31442086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档