我在數據庫中有一個XML列,我想用一種有效的方式使用Linq(toSQL)來查詢這個XML。LinqToSql中的Xml查詢
MyTable.Select(e => e.XmlObject.Element("Phone").Value)
...似乎這會查詢數據庫的XmlObject,但處理數據庫外的元素(「電話」)部分?如何創建查詢以便使用原生SQL XML函數? (我想要那個嗎?)
更新:使用sproc的速度會更快嗎?
我在數據庫中有一個XML列,我想用一種有效的方式使用Linq(toSQL)來查詢這個XML。LinqToSql中的Xml查詢
MyTable.Select(e => e.XmlObject.Element("Phone").Value)
...似乎這會查詢數據庫的XmlObject,但處理數據庫外的元素(「電話」)部分?如何創建查詢以便使用原生SQL XML函數? (我想要那個嗎?)
更新:使用sproc的速度會更快嗎?
我對我的XML列數據有同樣的問題 - 我當時唯一的解決方案是獲取整個XML列,轉換爲字符串並對其進行字符串搜索。很kludgy。
但是,我現在有a solution I have posted on my blog:在服務器上編寫SQLCLR函數,並將這些函數作爲標量函數公開給LINQ to SQL - 這些函數可以作爲LINQ查詢的一部分調用並在服務器上執行。
例如:如果XmlGetElementValue已被添加到DBML
var db = new MyDataContext();
var query = from x in db.MyTable
where db.XmlGetElementValue(x.XmlColName, "ElementX") == "somevalue"
select x;
。
LINQ to SQL提供程序不支持將C#表達式轉換爲SQL Server XQuery。
您將不得不使用普通的舊ADO.NET與基於字符串的查詢(存儲過程或代碼中的參數化命令文本查詢)來實現所需的結果。
我不認爲Linq2Sql支持本機SQL XML功能,但我可能是錯的。 – 2009-09-10 17:08:40
你以爲你用sproc解決它,但... – 2009-09-10 17:09:38