Возможно ли сделать XQuery через linq? - PullRequest
0 голосов
/ 11 августа 2011

У меня есть поле XML, которое содержит около 5 МБ данных на каждую запись, но иногда мне нужно прочитать только небольшую часть поля XML. Как вы можете себе представить, если бы я прочитал все поле XML и затем использовал Linq-to-XML для анализа XML-файла и получения значения, это было бы слишком медленно и дорого. Итак, я хочу знать, возможно ли получить значение напрямую, используя Linq вместо чтения всего поля XML?

Моя БД - SQL Server 2008

1 Ответ

1 голос
/ 11 августа 2011

Учитывая текущую информацию, я думаю, что лучшим решением является использование XML-индекса в SQL Server.

Существует четыре типа XML-индексов:

  1. Первичный
  2. Вторичный для PATH
  3. Вторичный для PROPERTY
  4. Вторичный для VALUE

В вашем случае оказывается, что вы знаете путь к нужным данным, естественно,Вторичный индекс 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

Это создаст вторичный индекс с использованием столбца пути в первичном индексе (который теперь мы знаем как таблицу).

Наконец, выполните запрос (sql), такой как этот, впроцедура и позвоните, что из вашего приложенияion:

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

Конечно, это не linq-запрос / решение, но лучше всегда использовать подходящий инструмент, а не пытаться его форсировать.

Для получения более подробной информации об индексах xml см. эту статью MSDN .

...