2010-07-22 83 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