Dapper SqlBuilder ouWhere utilisant AND au lieu de OU

dapper sqlbuilder

Question

J'essayais d'utiliser les méthodes Where et OrWhere de SqlBuilder pour Dapper, mais cela n'agit pas comme prévu.

La partie éditée de cette question est essentiellement ce que j'ai rencontré. Comme il n'a pas reçu de réponse, je le poserai ici.

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

Je m'attendais à select * from table WHERE a = @a OR b = @b

mais je suis select * from table WHERE a = @a AND b = @b

Est-il possible d'ajouter un OU à la clause where en utilisant le SqlBuilder?

Je pense que c'est juste une question de changer ce qui suit dans la classe SqlBuilder pour dire OR au lieu de AND, mais je voulais confirmer.

public SqlBuilder OrWhere(string sql, dynamic parameters = null)
{
    AddClause("where", sql, parameters, " AND ", prefix: "WHERE ", postfix: "\n", IsInclusive: true);
    return this;
}

Réponse acceptée

Ça ne fait rien. J'ai parcouru le code SqlBuilder et constaté que s'il y avait un mélange de Where et OrWhere, il ferait ce qui suit:

  • Joindre toutes les clauses AND
  • Joindre séparément toutes les clauses OR
  • Joindre les clauses OR à la fin des clauses AND avec un AND

Si vous n'avez pas plus de 1 OrWhere, vous ne verrez aucun OR.

Je vais modifier ma logique de requête pour en tenir compte


Réponse populaire

Vous devez modifier votre requête en:

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


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi