Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OrmLite/MySql/SqlExpressionVisitor - need "like" clause

I am new to LINQ and OrmLite/MySql. I have a service request argument that needs to result in a where clause:

`Name` LIKE '%something%' OR `Name` LIKE '%something%else%'

I know I can create an IN() or an = clause, via:

ev.Where(rn => Sql.In(rn.Name, request.Name));  // Assuming an array here
ev.Where(rn => rn.Name== request.Name));

But I can't seem to find a construct that lets me build up a LIKE. Also, Name is actually an alias so I am trying to avoid constructing the where clause manually.

like image 281
LiteWait Avatar asked Oct 16 '12 19:10

LiteWait


1 Answers

You can build that particular example using Contains, i.e:

ev.Where(rn => rn.Contains(rn.Name, "something") 
    || rn.Contains(rn.Name, "something%else"));

StartsWith and EndsWith are generally used in LINQ to generate LIKE clauses with a wildcard at only one end (but it does appear the MySql dialect defines StartsWith somewhat differently, likely for efficiency.)

You can check the default dialect source code to confirm what gets generated for EndsWith and Contains.

like image 180
Kevin Stricker Avatar answered Oct 01 '22 16:10

Kevin Stricker