在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获得相同的结果的任何想法?

提前感谢!

在cdata块中搜索字符串

Entity Framework自动转义传递给Contains, StartsWithEndsWith的任何特殊字符,因此您不需要使用[[]。试一试:

vc.Url.Contains(">" + URL + "<") || vc.Url.Contains("cdata[" + URL + "]")