我在数据库中有一个XML列,我想以有效的方式使用Linq(toSQL)查询这个XML。
MyTable.Select(e => e.XmlObject.Element("Phone").Value)
...似乎这会查询db for XmlObject但是数据库外部的进程元素(“Phone”)部分?如何创建查询以便使用本机SQL XML函数? (我想要吗?)
更新:使用sproc会比上面使用的替代品更快吗?
答案 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。