我在数据库中有一个XML列,我想以有效的方式使用Linq(toSQL)查询此XML。
MyTable.Select(e => e.XmlObject.Element("Phone").Value)
...似乎这查询数据库中的XmlObject,但在数据库外部处理Element(“ Phone”)部分?如何创建查询,以便使用本机SQL XML函数? (我想要那个吗?)
更新:使用存储过程是否会比上面使用的存储过程更快?
最佳答案
我的XML列数据存在相同的问题-当时我唯一的解决方案是获取整个XML列,转换为字符串并对其进行字符串搜索。很笨拙。
但是,我现在有了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的位置。