C# LinqToSql中的Xml查询
我在数据库中有一个XML列,我想用Linq(toSQL)高效地查询这个XMLC# LinqToSql中的Xml查询,c#,xml,linq-to-sql,C#,Xml,Linq To Sql,我在数据库中有一个XML列,我想用Linq(toSQL)高效地查询这个XML MyTable.Select(e => e.XmlObject.Element("Phone").Value) 。。。这似乎是在数据库中查询XmlObject,但进程元素(“Phone”)部分在数据库之外?如何创建查询以便使用本机SQL XML函数?(我想要吗?) 更新:使用存储过程是否比上述替代方法更快?LINQ to SQL提供程序不支持将C#表达式转换为SQL Server XQuery 您必须将普通的旧
MyTable.Select(e => e.XmlObject.Element("Phone").Value)
。。。这似乎是在数据库中查询XmlObject,但进程元素(“Phone”)部分在数据库之外?如何创建查询以便使用本机SQL XML函数?(我想要吗?)
更新:使用存储过程是否比上述替代方法更快?LINQ to SQL提供程序不支持将C#表达式转换为SQL Server XQuery
您必须将普通的旧ADO.NET与基于字符串的查询(存储过程或代码中的参数化命令文本查询)结合使用,才能获得所需的结果。我的XML列数据也有同样的问题-当时唯一的解决方案是获取整个XML列,转换为字符串并对其执行字符串搜索。非常笨拙 但是我现在有了:在服务器上编写一个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。我认为Linq2Sql不支持本机SQL XML函数,但我可能错了。您认为您可以通过存储过程解决它。。。