是否可以使用Dapper构建此查询?

时间:2015-03-19 23:40:37

标签: c# .net-3.5 dapper

有可能做到以下几点吗?我试过了,但是当它进入Query时,它只是说有一个空引用。

   var builder = new StringBuilder("select * from my table1 where 1 = 1");

if(x==1)
    builder.Append(" and x = @x");

if(y==2)
    builder.Append(" and y = @y");

// when it gets here, it just says null reference

 db.Query<table1>(builder.ToString(), new {x,y});

我让SqlBuilder在.net 3.5中运行,但是当我这样做时:

var builder = new SqlBuilder();

var sql = builder.AddTemplate("select * from table /**where**/ /**orderby**/");

 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 )

2 个答案:

答案 0 :(得分:0)

据推测,这是由于this bug。尝试修复是在2016年7月31日,但there are still issues采用这种方法。计划是将在下一个主要版本中修复。

答案 1 :(得分:0)

您可以使用DapperQueryBuilder 轻松创建动态条件

var query = cn.QueryBuilder($@"
    SELECT * 
    FROM Table
    WHERE 1=1
");

if(x==1)
    query.Append($"and x = {x}");

if(y==2)
    builder.Append($" and y = {y}");

var results = query.Query<YourPOCO>();

输出为完全参数化的SQL(WHERE 1=1 AND x = @p0 AND y = @p1)。

免责声明:我是该库的作者之一