Допустим, у меня есть таблица со столбцом данных типа XML. В SQL я могу выполнить следующий оператор:
select top 10 *,
Content.value('(/root/item/value)[1]', 'float') as Value
from xmltabletest
where Content.value('(/root/item/MessageType)[1]', 'int') = 1
Набор результатов содержит только записи, соответствующие критериям, и извлекает значение из XML в столбец под названием «Значение». Красиво и просто.
Можно ли добиться того же с помощью Linq To SQL?
Я бы хотел, чтобы SQL выполнял тяжелую работу и возвращал только данные, соответствующие моим критериям, вместо того, чтобы выбирать, передавать и затем обрабатывать потенциально массивный фрагмент данных. Насколько я могу судить, в настоящее время это невозможно, но я подумал, что мне следует спросить.
(Среда - .NET 3.5, VS2008, SQL Server 2005, если это помогает)
Собственно, мы будем использовать метод контекста данных. Отстой, но он выполняет свою работу, и у нас есть только одна сущность с XML-столбцом. Должен быть легко содержаться в чистоте и порядке.





Я не совсем уверен, устарело ли это сейчас, но в соответствии с типами данных XML Скотт Гатри:
represented as strings in LINQ to SQL Entities. You could use XLINQ to query on an XML column within your LINQ to SQL entitiy - but this querying would happen in your middle-tier (within ASP.NET). You can't execute a remote XQuery against the database and filter returned results based on that in the first release.
Поэтому, отвечая на ваш вопрос, я отвечу «нет».
Я столкнулся с теми же проблемами, и мне пришлось делать это, используя сохраненные процессы или выполняя запросы xquery через текст данных.