我有类似的东西
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
之类的字符串,{ {1}},xxxABCyyy
,xxxANYTHINGyyy
等xxxyyy
和prefix %
的添加很好,但如果需要我可以手动执行。
在上面的例子中,我简化并只编写了一个where条件,但我有一个动态逻辑,用许多这样的关键字构建谓词,我想允许将通配符嵌入到关键字中。有没有办法告诉EF不要逃避搜索关键字中的%?
答案 0 :(得分:1)
这是不可能的。 Contains("xxx")
表示在SQL中需要LIKE '%xxx%'
。 Linq-to-entities和它的String
映射方法都不提供完整的通配符搜索=任何通配符始终是转义的。如果要使用通配符搜索,则必须使用Entity SQL。