Как запросить данные XML в столбце базы данных с помощью Linq to SQL и Linq в XML?

XML:

<root>
    <item>
        <href>http://myurl</href>
    </item>
    <item>
        <href>http://myurl2</href>
    </item>
</root>

XML-данные хранятся в таблице базы данных.

Могу ли я создать запрос Linq, который выбирает строки, извлекает XML, а затем, например, извлекает все теги href ? Конечным результатом будет список всех URL-адресов для всех выбранных строк.

Это моя попытка, но она не дает мне того, что я хочу - это список всех href для всех выбранных пользователей. Я просто получаю список пустых IEnumerations.

var all = from bm in MYTABLE
        select new { name=bm.SPP_USER_ID, xml=(string) bm.SPP_BOOKMARKS_XML};

var docs = from x in all
        select XDocument.Parse(x.xml);
var href = from h in docs
        select h.Descendants("href");


Решение

Было 2 проблемы.

- Я предполагаю, что запрос выполняется только тогда, когда действительно требуется результат. По мере того, как я переходил от SQL-запроса к XML-запросу, полученный в результате запрос стал смесью SQL и XML и, следовательно, стал невыполнимым. Мое решение заключалось в том, чтобы добиться результата путем преобразования запроса SQL в список результатов. Это отделяло linq-sql от linq-xml.

var docs = from x in all
        select XDocument.Parse(x.xml);
var docs2 = docs.ToList();  // force result

- Вторая проблема заключалась в том, что я забыл добавить пространство имен в свой XML-запрос. Как только я это сделал, я получил требуемый результат

XNamespace ns = "http://acme/bookmarks";
var href = from h in docs2
    select h.Descendants(ns + "href");

Спасибо за вашу помощь!

5
задан paul 15 June 2011 в 06:13
поделиться