可以通过linq做XQuery吗?

时间:2011-08-11 08:41:29

标签: sql-server linq linq-to-xml xquery

我有一个XML字段,每个记录有大约5MB的数据,但有时,我只需要读取XML字段的一小部分。可以想象,如果我读取整个XML字段然后使用Linq-to-XML来解析XML文件并收集值,那么它将太慢而且昂贵。所以我想知道,是否可以直接使用Linq获取值而不是读取整个XML字段?

我的数据库是SQL Server 2008

1 个答案:

答案 0 :(得分:1)

根据提供的当前信息,我认为最好的解决方案是在SQL Server中使用XML索引。

有四种类型的XML索引:

  1. 主要
  2. PATH的辅助
  3. 物业的辅助
  4. VALUE的辅助
  5. 在您的情况下,您似乎知道所需数据的路径,自然地,辅助PATH索引似乎是最合适的。

    请按照以下步骤创建此索引:

    创建主索引

    create primary xml index XIX_XmlColumnName on XmlTable(XmlColumnName)
    go
    

    这将为你的xml列创建“基础”索引,基本上这意味着xml将被粉碎到一个隐藏的表并存储值,其中每个元素都被转换为一行。

    创建辅助路径索引

    create xml index XIX_XmlColumnName_Path on XmlTable(XmlColumnName)
    using xml index XIX_XmlColumnName for path
    go
    

    这将使用主索引中的path-column创建一个二级索引(我们现在知道它是一个表)。

    最后,在一个过程中运行一个(sql)查询,并从你的应用程序中调用它:

    select XmlColumnName.query('/path/to/element')
    from XmlTable
    

    当然,这不是一个linq查询/解决方案,但是最好使用适合的工具,而不是试图强制它。

    有关xml索引的更深入信息,请参阅this msdn-article