LinqToSql中的Xml查询

时间:2009-09-10 17:00:41

标签: c# xml linq-to-sql

我在数据库中有一个XML列,我想以有效的方式使用Linq(toSQL)查询这个XML。

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

...似乎这会查询db for XmlObject但是数据库外部的进程元素(“Phone”)部分?如何创建查询以便使用本机SQL XML函数? (我想要吗?)

更新:使用sproc会比上面使用的替代品更快吗?

2 个答案:

答案 0 :(得分:2)

LINQ to SQL提供程序不支持将C#表达式转换为SQL Server XQuery。

您将不得不使用普通的旧ADO.NET和基于字符串的查询(对于存储过程或代码中的参数化命令文本查询)来实现您想要的结果。

答案 1 :(得分:1)

我的XML列数据存在同样的问题 - 我当时唯一的解决方案是获取整个XML列,转换为字符串并对其进行字符串搜索。非常kludgy。

但是我现在有a solution I have posted on my blog:在服务器上编写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添加到dbml。