2
我有这样的事情防止EF逃逸通配符
var query = repo.GetQuery(); // IQueryable
query.Where(item => item.FieldName.Contains("xxx%yyy"));
它导致下面的语句SQL服务器
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__linq__0=N'%xxx~%yyy%
上导致SQL服务器查找xxx%yyy
与%
为文字(因为它是逃脱),而我希望它匹配字符串,如xxx123yyy
,xxxABCyyy
,xxxANYTHINGyyy
,xxxyyy
等等。prefix %
和suffix %
是好的,但我可以手动做到这一点,如果需要。
在上面的例子中,我简化了并且只写了一个条件,但是我有一个动态逻辑,用许多这样的关键字构建谓词,并且我想允许通配符嵌入到关键字中。有没有办法告诉EF不要在搜索关键字中跳过%?
谢谢。我找到了相关的问题,但希望可能有新的东西。我正在使用ExecuteStoreQuery和手工制作的SQL以及参数。早些时候,我使用PredicateBuilder进行静态绑定,并不是所有东西都是字符串:( –
@amit_g:如果你正在使用SQL Server,那么有一个解决方法('SqlFunctions.PatIndex')允许你使用LINQ查询:http:/ /stackoverflow.com/questions/6202036/entity-framework-v4-1-like/8000303#8000303。我不知道这个函数在SQL Server中的性能与普通的'LIKE'相比(但它可能不会更好)。 – Slauma