【问题标题】:XQuery in Linq To Entities for Sql Server XML Data TypeSql Server XML 数据类型的 Linq To 实体中的 XQuery
【发布时间】:2011-03-19 19:29:58
【问题描述】:

我试图弄清楚如何在包含 XML 数据类型的 SQL Server 数据库上执行 Linq To Entities 查询:

我想做一个只返回包含超过 2000 个字符的指定 XML 节点的数据库级查询

这在 Linq To Entity 中是否可行?

更新

我想在 linq-to-entities 中做这样的事情,但我认为不可能

var q = from c in Changes
 where c.Content.XPathSelectElement("OpsNotes").Value.Length >= 2000;
 select c;

在 sql server 数据库中,XML 内容是一个名为“OpsNotes”的节点

 <Content Type="AP" Version="1">
  <Name>CPU FAIL-OVER</Name>
  <Bands>
    <Band>BAND DATA</Band>
  </Bands>
  <StartTime IsCritical="false" IsTimeSet="true">2009-12-06T14:00:00.0000000Z</StartTime>
  <Duration>00:30:00</Duration>
  <RecurrenceRule>RRULE:[List]{340/2009}</RecurrenceRule>
  <OpsNotes>Rationale: Support standard weekly DVIS CPU fail-over</OpsNotes>
   </Content>

【问题讨论】:

  • 我很想知道你是否找到并回答了这个问题,如果是的话,你介意在这里发帖
  • 抱歉没有......我认为下面的答案会有所帮助 - 我们决定使用基于休息的服务来发布 xml 数据,而不是直接访问实体框架层......这解决了我们的问题。

标签: c# xml tsql linq-to-entities


【解决方案1】:

如果有可能,我会很惊讶,直接。

您最喜欢做以下两种解决方法之一:

  • 从 SQL Server 字段中检索 XML 作为字符串,并将其放入 XDocument(Linq-to-XML)或 XmlDocument(基于 DOM 的处理)中并对其进行处理

或:

  • 使用 SQL Server XQuery 处理 SQL Server 本身的请求,并以字符串、整数等形式返回结果 - 无论您需要做什么

我个人更喜欢在服务器本身上处理 XQuery 内容的选项 - 为了帮助您解决具体问题,您必须提供一些示例 XML 并说明您想要做什么... .

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

var q = from c in Changes 其中 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

或类似的东西。

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

【讨论】:

  • 是的 - 我想我现在会尝试..谢谢! - 似乎 Linq-To-Entities 应该支持 XML 数据类型
【解决方案2】:

您必须为此编写 SQL。

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

【讨论】:

  • 嗯,不使用 EF4,虽然我在 LinqPad 4 上得到了它,但我认为 - 我会调查
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-01
相关资源
最近更新 更多