XML-запрос в LinqToSql - PullRequest
       13

XML-запрос в LinqToSql

2 голосов
/ 10 сентября 2009

У меня есть столбец XML в базе данных, и я хотел бы запросить этот XML с помощью Linq (toSQL) эффективным способом.

MyTable.Select(e => e.XmlObject.Element("Phone").Value)

... Кажется, это запрашивает базу данных для XmlObject, но обрабатывает элемент Element ("Phone") вне базы данных? Как мне создать запрос, чтобы использовать собственные функции XML XML? (Хочу ли я этого?)

Обновлено: будет ли использование sproc быстрее, чем альтернатива, использованная выше?

Ответы [ 2 ]

2 голосов
/ 10 сентября 2009

Поставщик LINQ to SQL не поддерживает перевод выражений C # в SQL Server XQuery.

Вам потребуется использовать старый добрый ADO.NET со строковым запросом (к хранимой процедуре или параметризованному текстовому запросу команды в коде), чтобы достичь желаемых результатов.

1 голос
/ 20 января 2011

У меня была та же проблема с данными моего столбца XML - единственное решение, которое у меня было в то время, было получить весь столбец XML, преобразовать его в строку и выполнить поиск по ней. Очень клёвый.

Однако теперь у меня есть решение, которое я разместил в своем блоге : напишите на сервере функцию SQLCLR и предоставьте ее LINQ to SQL как скалярную функцию - ее можно вызывать как часть LINQ запрос и выполнится на сервере.

Например:

var db = new MyDataContext();
var query = from x in db.MyTable 
            where db.XmlGetElementValue(x.XmlColName, "ElementX") == "somevalue" 
            select x;

Где XmlGetElementValue был добавлен в базу данных.

...