在cdata块中搜索字符串

时间:2014-08-08 15:09:15

标签: c# sql-server linq cdata

我的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 + "]")

如果searchtext匹配且没有CDATA,则where条件有效,我得到结果。

如果searchtext匹配并且有CDATA,那么where条件不起作用。

如果我通过SQL Server Management Studio执行查询:

  where vc.Url like '%>something<%' OR vc.Url like '%cdata[[]something]%'

我获得了预期的结果。

如何以正确的方式编写where条件并通过SQL和LINQ获得相同的结果?

提前致谢!

1 个答案:

答案 0 :(得分:0)

实体框架会自动转义传递到ContainsStartsWithEndsWith的所有特殊字符,因此您不需要使用[[]。尝试:

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