2

Is it possible do do the following? I tried, but when it got to the Query, it just said there was a null reference.

   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});

I got SqlBuilder to run in .net 3.5, but when I do this:

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 });

I expected select * from table WHERE a = @a OR ( b = @b )

but I got:

I expected select * from table WHERE a = @a AND ( b = @b )

xaisoft
  • 3,343
  • 8
  • 44
  • 72

2 Answers2

0

Presumably this was due to this bug. The attempted fix was made on Jul 31 2016 however there are still issues with this approach. The plan is that this would be fixed in the next major release.

ajbeaven
  • 9,265
  • 13
  • 76
  • 121
0

You can easily create that dynamic condition using 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>();

The output is fully parametrized SQL (WHERE 1=1 AND x = @p0 AND y = @p1).

Disclaimer: I'm one of the authors of this library

drizin
  • 1,737
  • 1
  • 18
  • 44