c# - Linq 实体 (EF 4.1) : How to do a SQL LIKE with a wildcard in the middle ( '%term%term%' )?

标签 c# sql-server-2005 linq-to-entities entity-framework-4.1

我要搜索这个:

Post Cereal

得到这个:

Post Honey Nut Cereal

通配符是空格。

我知道我可以执行 SPLIT 和一系列 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) );

有什么建议吗?

最佳答案

我相信你可以使用 SqlFunctions.PatIndex :

dt.Table.Where(p => SqlFunctions.PatIndex(term, p.fieldname) > 0);

SqlFunctions.PatIndex 的行为与 SQL LIKE 相同运算符(operator)。它支持所有标准通配符,包括:

  • % 零个或多个字符的任何字符串。
  • _(下划线)任何单个字符。
  • [ ] 指定范围 ([a-f]) 或集合 ([abcdef]) 内的任何单个字符。
  • [^] 不在指定范围 ([^a-f]) 或集合 ([^abcdef]) 内的任何单个字符。

SqlFunctions.PatIndex 通常在 SqlMethods.Like 不可用时可用(包括在 MVC Controller 中)

关于c# - Linq 实体 (EF 4.1) : How to do a SQL LIKE with a wildcard in the middle ( '%term%term%' )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7689284/

相关文章:

c# - LINQ to SQL Select Distinct by Multiple Columns 并返回整个实体

c# - 为什么 ReadOnlyObservableCollection.CollectionChanged 不公开?

c# - TestContext 定义的目录的目的是什么?

c# - 基于数组对列表进行排序

sql - 存储过程获取参数列表和当前值

sql - 排序规则冲突

sql-server - 选择按周分组的 SQL 结果

c# - 在 Linq-to-Entities 查询表达式中使用元组或其他一些复杂类型

c# - 避免 Linq-To-Objects 但允许重用代码

c# - "using"命名空间声明中的语句位置