首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Linq to Entities (EF 4.1):如何在SQL中使用通配符( '%term%term%')?

Linq to Entities (EF 4.1):如何在SQL中使用通配符( '%term%term%')?
EN

Stack Overflow用户
提问于 2011-10-07 23:17:28
回答 2查看 8.3K关注 0票数 18

我想搜索这个:

代码语言:javascript
复制
Post Cereal

并获得以下内容:

代码语言:javascript
复制
Post Honey Nut Cereal

通配符是空格。

我知道我可以对每个术语进行拆分和一系列and和Contains(),并将其转换为Linq表达式作为规范对象,但是没有一种方法可以在发送到SQL的术语中使用通配符吗?我查看了在Linq to SQL中的SQL函数,但我不确定它在Linq to Entities中是什么。

我想做这样的事情:

代码语言:javascript
复制
term = '%' + term.Replace(' ', '%') + '%';
db.table.where( p => System.Data.Objects.SqlClient.SqlFunctions
                     .SqlMethods.Like(p.fieldname, term) );

有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2011-10-07 23:51:51

绕过LINQ并使用实体SQL过滤器可能更容易:

代码语言:javascript
复制
var query - db.table.Where("TRIM(fieldname) LIKE @pattern");
query.Parameters.Add(new ObjectParameter("pattern", term)); // term == "%what%ever%"

并且query的类型实现了IQueryable<TEntity>,因此您可以应用更多的LINQ运算符。

票数 5
EN

Stack Overflow用户

发布于 2014-10-08 22:15:54

只是为了澄清Ladislav对it.BusinessName的评论。我想他指的是在字段名前加上.it。只要在where子句中为字段名加上前缀it.,上述解决方案就有效。在我的例子中,我也不需要TRIM()。

代码语言:javascript
复制
var query - db.table.Where("it.fieldname LIKE @pattern");
query.Parameters.Add(new ObjectParameter("pattern", term)); // term == "%what%ever%"

它在Oracle数据库上工作得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7689284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档