Zac*_*ott 18 c# linq-to-entities sql-server-2005 entity-framework-4.1
我想搜索一下:
Post Cereal
Run Code Online (Sandbox Code Playgroud)
得到这个:
Post Honey Nut Cereal
Run Code Online (Sandbox Code Playgroud)
那里的外卡是空格.
我知道我可以为每个术语做一个SPLIT和一系列ANDs和Contains()并转换为Linq Expression作为规范对象,但是在发送给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) );
Run Code Online (Sandbox Code Playgroud)
有什么建议?
Jef*_*ata 46
我相信你可以使用SqlFunctions.PatIndex:
dt.Table.Where(p => SqlFunctions.PatIndex(term, p.fieldname) > 0);
Run Code Online (Sandbox Code Playgroud)
SqlFunctions.PatIndex的行为与SQL LIKE运算符相同.它支持所有标准通配符,包括:
当SqlMethods.Like不可用时(包括在MVC控制器中),SqlFunctions.PatIndex通常可用
绕过LINQ并使用Entity SQL过滤器可能更容易:
var query - db.table.Where("TRIM(fieldname) LIKE @pattern");
query.Parameters.Add(new ObjectParameter("pattern", term)); // term == "%what%ever%"
Run Code Online (Sandbox Code Playgroud)
和query实现的类型,IQueryable<TEntity>以便您可以应用更多的LINQ运算符.
| 归档时间: |
|
| 查看次数: |
7905 次 |
| 最近记录: |