Entity framework 4 防止EF转义通配符
我有类似的东西Entity framework 4 防止EF转义通配符,entity-framework-4,Entity Framework 4,我有类似的东西 var query = repo.GetQuery(); // IQueryable query.Where(item => item.FieldName.Contains("xxx%yyy")); 它在SQL server上生成以下语句 exec sp_executesql N'SELECT // clipped WHERE ([Extent1].[FieldName] LIKE @p__linq__0 ESCAPE N''~'')', N'@p__linq_
var query = repo.GetQuery(); // IQueryable
query.Where(item => item.FieldName.Contains("xxx%yyy"));
它在SQL server上生成以下语句
exec sp_executesql N'SELECT
// clipped
WHERE ([Extent1].[FieldName] LIKE @p__linq__0 ESCAPE N''~'')',
N'@p__linq__0 nvarchar(4000),@p__linq__0=N'%xxx~%yyy%'
@p\uu linq\uu 0=N'%xxx~%yyy%
使SQL server查找xxx%yyy
,其中%
作为文本(转义),而我希望它匹配字符串,如xxx123yyy
,xxxABCyyy
,xxxanythingyy
,xxxyy
等。添加前缀%
和后缀%
很好,但如果需要,我可以手动执行
在上面的例子中,我只简化并编写了一个where条件,但我有一个动态逻辑,用许多这样的关键字构建谓词,我想允许将通配符嵌入关键字中。有没有办法告诉EF不要转义搜索关键字中的%?这是不可能的
Contains(“xxx”)
表示在SQL中您想要像“%xxx%”这样的
。Linq to entities及其String
映射方法都不提供完整的通配符搜索=始终转义任何通配符。如果要使用通配符搜索,必须使用。谢谢。我找到了相关的问题,但希望可能有新的东西。我将ExecuteStoreQuery与手工编制的SQL以及参数一起使用。前面我使用的是带有静态绑定的PredicateBuilder,并非所有内容都是字符串:(@amit\u g:如果您使用的是SQL Server,那么就有一个解决方法(SqlFunctions.PatIndex
)它允许您使用LINQ查询:。我不知道SQL Server中该函数与普通的相比的性能如何(但可能并不比普通的更好)。