我要搜索这个:
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/