2010-07-22 84 views
3

我试图找出如何做一个LINQ到实体查询上包含一个XML数据类型的SQL Server数据库:的XQuery在LINQ到实体为SQL Server XML数据类型

我希望做一个数据库级查询仅返回包含超过2000个字符

指定的XML节点Linq中这是可能的实体?

更新

以及我想要做这样的事情在LINQ到实体,但我不认为它可能

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> 
+0

ID来渴望知道,如果你发现了,并回答了这一点,如果是的话,你会介意张贴在这里 – 2010-09-28 23:25:18

+0

遗憾没有。我觉得下面的回答将帮助 - 我们决定用基于REST的服务去发布XML数据而不是直接访问实体框架层..这解决了我们的问题。 – 2011-01-13 14:52:29

回答

1

如果可能的话,我会感到惊讶,直接。

你最喜欢需要做两种解决方法之一:

  • 检索从SQL Server字段作为一个字符串的XML,并把它变成一个XDocument(LINQ到XML)或XmlDocument的(基于DOM处理),并做它的伎俩

或:

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

我个人更喜欢在服务器本身处理XQuery的东西 - 为了帮助你解决具体问题,你必须提供一些示例XML和一个解释你想做的事....

更新:为您的要求,在SQL Server中的XQuery,你必须写类似:=从C在变化​​ 其中c

变种q值。 Content.XPathSelectElement(“OpsNotes”)。Value.Length> = 2000; select c;

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

或类似的东西。

作为额外的奖励,在这种情况下,你只能从服务器传输的行较少量的回你的客户端应用程序,因为服务器已经过滤掉所有的不匹配行。

+0

是的 - 我想我现在会尝试。谢谢! - 看起来像XML dataype应该由Linq-To-Entities – 2010-07-22 21:46:58

0

你必须编写SQL这一点。

在EF 4,你可以使用ExecuteStoreQuery执行任意SQL与实体类型的结果。

+0

支持嗯不使用EF4,虽然我已经在LinqPad 4上它我认为-i将调查 – 2010-07-22 21:48:06