2009-09-10 114 views
2

我在數據庫中有一個XML列,我想用一種有效的方式使用Linq(toSQL)來查詢這個XML。LinqToSql中的Xml查詢

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

...似乎這會查詢數據庫的XmlObject,但處理數據庫外的元素(「電話」)部分?如何創建查詢以便使用原生SQL XML函數? (我想要那個嗎?)

更新:使用sproc的速度會更快嗎?

+0

我不認爲Linq2Sql支持本機SQL XML功能,但我可能是錯的。 – 2009-09-10 17:08:40

+1

你以爲你用sproc解決它,但... – 2009-09-10 17:09:38

回答

1

我對我的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; 

2

LINQ to SQL提供程序不支持將C#表達式轉換爲SQL Server XQuery。

您將不得不使用普通的舊ADO.NET與基於字符串的查詢(存儲過程或代碼中的參數化命令文本查詢)來實現所需的結果。