Does Dapper support the like operator?

后端 未结 4 2042
遇见更好的自我
遇见更好的自我 2021-01-30 12:19

Using Dapper-dot-net...

The following yields no results in the data object:

var data = conn.Query(@\"
    select top 25 
    Term as Label, 
    Type, 
          


        
相关标签:
4条回答
  • 2021-01-30 12:57

    The answer from Sam wasn't working for me so after some testing I came up with using the SQLite CONCAT equivalent which seems to work:

    string sql = "SELECT * FROM myTable WHERE Name LIKE '%' || @NAME || '%'";
    var data = IEnumerable data = conn.Query(sql, new { NAME = Name });
    
    0 讨论(0)
  • 2021-01-30 13:04

    Best way to use this to add concat function in query as it save in sql injecting as well, but concat function is only support above than sql 2012

    string query = "SELECT * from country WHERE Name LIKE CONCAT('%',@name,'%');"
    var results = connection.query<country>(query, new {name});
    
    0 讨论(0)
  • 2021-01-30 13:13

    Try:

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

    There is nothing special about like operators, you never want your params inside string literals, they will not work, instead they will be interpreted as a string.

    note

    The hard-coded example in your second snippet is strongly discouraged, besides being a huge problem with sql injection, it can cause dapper to leak.

    caveat

    Any like match that is leading with a wildcard is not SARGable, which means it is slow and will require an index scan.

    0 讨论(0)
  • 2021-01-30 13:14

    Yes it does. This simple solution has worked for me everytime:

    db.Query<Remitente>("SELECT * 
                         FROM Remitentes 
                         WHERE Nombre LIKE @n", new { n = "%" + nombre + "%" })
                       .ToList();
    
    0 讨论(0)
提交回复
热议问题