C# Sql Server XML数据类型的Linq To实体中的XQuery

C# Sql Server XML数据类型的Linq To实体中的XQuery,c#,xml,tsql,linq-to-entities,C#,Xml,Tsql,Linq To Entities,我正在尝试了解如何在包含XML数据类型的SQL Server数据库上执行Linq to Entities查询: 我想执行一个数据库级查询,只返回一个包含2000多个字符的指定XML节点 这在Linq To实体中是否可能 更新 我想在linq中对实体执行类似的操作,但我认为这是不可能的 var q = from c in Changes where c.Content.XPathSelectElement("OpsNotes").Value.Length >= 2000; select

我正在尝试了解如何在包含XML数据类型的SQL Server数据库上执行Linq to Entities查询:

我想执行一个数据库级查询,只返回一个包含2000多个字符的指定XML节点

这在Linq To实体中是否可能

更新

我想在linq中对实体执行类似的操作,但我认为这是不可能的

var q = from c in Changes
 where c.Content.XPathSelectElement("OpsNotes").Value.Length >= 2000;
 select c;
在sql server数据库中,XML内容是一个名为“OpsNotes”的节点


CPU故障转移
波段数据
2009-12-06T14:00:00.0000000Z
00:30:00
RRULE:[列表]{340/2009}
理由:支持标准的每周DVIS CPU故障转移

如果这是可能的话,我会很惊讶

您最想做的是两种变通方法之一:

  • 从SQLServer字段中以字符串形式检索XML,并将其放入XDocument(Linq到XML)或XmlDocument(基于DOM的处理)中,然后对其进行处理
或:

  • 使用SQL Server XQuery在SQL Server本身上处理请求,并以字符串、整数等形式返回结果-无论您需要做什么
我个人更倾向于选择在服务器上处理XQuery内容——为了帮助您解决具体问题,您必须提供一些示例XML和您想要做什么的解释

更新:根据您的要求,在SQL Server XQuery中,您必须编写如下内容:

var q=变化中的c 其中c.Content.XPathSelectElement(“OpsNotes”).Value.Length>=2000; 选择c

SELECT (list of fields)
FROM dbo.Changes c
WHERE c.Content.value('(string-length(string((/Content/OpsNotes)[1])))', 'int') >= 2000
或者类似的


作为额外的好处,在这种情况下,您只需要将少量行从服务器传输回客户端应用程序,因为服务器已经过滤掉了所有不匹配的行。

您必须为此编写SQL


在EF 4中,您可以使用来执行带有实体类型结果的任意SQL。

是的-我想现在我会试试。。谢谢似乎LinqTo Entities应该支持XML数据类型HMM不使用EF4,尽管我在LinqPad 4上得到了它,我想-我会很想知道你是否找到了并回答了这个问题,如果是的话,你介意在这里发布抱歉没有。。我认为下面的答案会有所帮助-我们决定使用基于rest的服务发布xml数据,而不是直接访问实体框架层。。这解决了我们的问题。
SELECT (list of fields)
FROM dbo.Changes c
WHERE c.Content.value('(string-length(string((/Content/OpsNotes)[1])))', 'int') >= 2000