Utilisation de Dapper-dot-net ...
Les éléments suivants ne produisent aucun résultat dans l'objet de données:
var data = conn.Query(@"
select top 25
Term as Label,
Type,
ID
from SearchTerms
WHERE Term like '%@T%'",
new { T = (string)term });
Cependant, lorsque j'utilise simplement un format de chaîne normal comme:
string QueryString = String.Format("select top 25 Term as Label, Type, ID from SearchTerms WHERE Term like '%{0}%'", term);
var data = conn.Query(QueryString);
Je récupère 25 lignes dans la collection. Dapper n'analyse-t-il pas correctement la fin du paramètre @T
?
Essayer:
term = "whateverterm";
var encodeForLike = term => term.Replace("[", "[[]").Replace("%", "[%]");
string term = "%" + encodeForLike(term) + "%";
var data = conn.Query(@"
select top 25
Term as Label,
Type,
ID
from SearchTerms
WHERE Term like @term",
new { term });
Les opérateurs similaires n'ont rien de spécial, vous ne voulez jamais que vos paramètres soient à l'intérieur des littéraux de chaîne, ils ne fonctionneront pas, ils seront plutôt interprétés comme une chaîne.
note
L'exemple codé en dur dans votre deuxième extrait est fortement déconseillé, en plus d'être un énorme problème avec l'injection sql, il peut provoquer une fuite de dapper.
mise en garde
Toute correspondance like
qui mène avec un caractère générique n'est pas SARGable, ce qui signifie qu'elle est lente et nécessitera un balayage d'index.
Le meilleur moyen d'utiliser cela pour ajouter la fonction concat dans la requête car il enregistre également dans l'injection sql, mais la fonction concat est uniquement prise en charge au-dessus de sql 2012
string query = "SELECT * from country WHERE Name LIKE CONCAT('%',@name,'%');"
var results = connection.query<country>(query, new {name});
Oui. Cette solution simple a fonctionné pour moi à chaque fois:
db.Query<Remitente>("SELECT *
FROM Remitentes
WHERE Nombre LIKE @n", new { n = "%" + nombre + "%" })
.ToList();
La réponse de Sam ne fonctionnait pas pour moi, donc après quelques tests, j'ai trouvé l'utilisation de équivalent SQLite CONCAT qui semble fonctionner:
string sql = "SELECT * FROM myTable WHERE Name LIKE '%' || @NAME || '%'";
var data = IEnumerable data = conn.Query(sql, new { NAME = Name });