I want to search for this:
Post Cereal
and get this:
Post Honey Nut Cereal
where the wild cards would be
It is probably easier to bypass LINQ and use an Entity SQL filter:
var query - db.table.Where("TRIM(fieldname) LIKE @pattern");
query.Parameters.Add(new ObjectParameter("pattern", term)); // term == "%what%ever%"
and the type of query
implements IQueryable<TEntity>
so you can apply further LINQ operators.
Just to clarify Ladislav's comment regarding it.BusinessName
. I think what he is referring to is prefixing the field name with .it
. The above solution works as long as you prefix the field name in the where clause with it.
. Also I didn't need the TRIM() in my case.
var query - db.table.Where("it.fieldname LIKE @pattern");
query.Parameters.Add(new ObjectParameter("pattern", term)); // term == "%what%ever%"
It worked perfectly against an Oracle database.
I believe you could use SqlFunctions.PatIndex:
dt.Table.Where(p => SqlFunctions.PatIndex(term, p.fieldname) > 0);
SqlFunctions.PatIndex behaves the same as the SQL LIKE operator. It supports all standard wildcard characters including:
SqlFunctions.PatIndex is often available when the SqlMethods.Like is not available (including within MVC controllers)