我在数据库中有一个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