有可能做到以下几点吗?我试过了,但是当它进入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 )
答案 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
)。
免责声明:我是该库的作者之一