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)