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中该函数与普通的
相比的性能如何(但可能并不比普通的
更好)。