2009-09-10 158 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与基于字符串的查询(存储过程或代码中的参数化命令文本查询)来实现所需的结果。