在cdata块中搜索字符串
本文关键字:搜索 字符串 cdata | 更新日期: 2023-09-27 18:17:20
我的Microsoft SQL Server表的其中一列包含一个格式化为XML的字符串
<root>
<de><![CDATA[something]]></de>
<fr><![CDATA[something]]></fr>
<it><![CDATA[something]]></it>
<en><![CDATA[something]]></en>
</root>
或
<root>
<de>something</de>
<it>something</it>
<fr>something</fr>
<en>something</en>
</root>
我需要提取包含某个单词的所有记录,无论是否有CDATA。
所以我这样构造了LINQ中的where条件:
vc.Url.Contains(">" + URL + "<") || vc.Url.Contains("cdata[[]" + URL + "]")
如果搜索文本匹配并且没有CDATA,那么where条件工作并且我得到结果。
如果搜索文本匹配并且存在CDATA,则where条件不起作用。
如果我通过SQL Server Management Studio执行查询:
where vc.Url like '%>something<%' OR vc.Url like '%cdata[[]something]%'
我得到了预期的结果。
关于如何以正确的方式编写where条件并通过SQL和LINQ获得相同的结果的任何想法?
提前感谢!
Entity Framework自动转义传递给Contains
, StartsWith
和EndsWith
的任何特殊字符,因此您不需要使用[[]
。试一试:
vc.Url.Contains(">" + URL + "<") || vc.Url.Contains("cdata[" + URL + "]")