我想搜索这个:
Post Cereal
并获得以下内容:
Post Honey Nut Cereal
通配符是空格。
我知道我可以对每个术语进行拆分和一系列and和Contains(),并将其转换为Linq表达式作为规范对象,但是没有一种方法可以在发送到SQL的术语中使用通配符吗?我查看了在Linq to SQL中的SQL函数,但我不确定它在Linq to Entities中是什么。
我想做这样的事情:
term = '%' + term.Replace(' ', '%') + '%';
db.table.where( p => System.Data.Objects.SqlClient.SqlFunctions
.SqlMethods.Like(p.fieldname, term) );
有什么建议吗?
发布于 2011-10-07 23:51:51
绕过LINQ并使用实体SQL过滤器可能更容易:
var query - db.table.Where("TRIM(fieldname) LIKE @pattern");
query.Parameters.Add(new ObjectParameter("pattern", term)); // term == "%what%ever%"
并且query
的类型实现了IQueryable<TEntity>
,因此您可以应用更多的LINQ运算符。
发布于 2014-10-08 22:15:54
只是为了澄清Ladislav对it.BusinessName
的评论。我想他指的是在字段名前加上.it
。只要在where子句中为字段名加上前缀it.
,上述解决方案就有效。在我的例子中,我也不需要TRIM()。
var query - db.table.Where("it.fieldname LIKE @pattern");
query.Parameters.Add(new ObjectParameter("pattern", term)); // term == "%what%ever%"
它在Oracle数据库上工作得很好。
https://stackoverflow.com/questions/7689284
复制相似问题