2010-07-19 26 views
2

Linq to XML我很新Linq to SQL,但將一些代碼拼湊在一起,將存儲過程的XML結果放入XElement中。然而,它開始失敗,顯然現在XML數據越來越大(2K +),而我的.Parse正在讀取截斷的XML(XML數據返回兩行)。在我開始用xmlReaders和所有這些開始摸索雜草之前,也許我看着這個錯誤,並有更好的方法。如何將大型XML RAW從Linq讀取到SQL?

我確切的問題在下面,但我也很好奇任何標準的Linq成語做這種事情。


我得到特定的錯誤是

System.Xml.XmlException:意外的文件 結束在解析名稱有 發生。 1號線位置2034

我的C#代碼是這樣的

XDocument orders = new XDocument(from b in db.GetUserOrders(userid) 
select XElement.Parse(b.XML_F52E5B62_58B1_21e2_B105_00805A49AB12)); 

存儲的過程看起來像

select * from orders where userid = @userid order by tscreated 
for xml raw('order'), ROOT('orders') 

的XML從存儲過程返回看起來像

<orders> 
    <order OrderId="123" UserId="bob" tscreated="2010-07-16T16:46:46.173"> 
    <morexml> 
     <element1> 
     <element2>abc</element2> 
     <!--more stuff--> 
     </element1> 
    </morexml> 
    </order> 
    <!--lots more orders--> 
</orders> 
+0

xml結果有多大?一切看起來都很正常...... – 2010-07-19 20:38:40

+0

可能相當大,即。幾個K.它看起來像xml回來兩行,所以我可能需要某種讀者或迭代器或某事,但在混合東西之前,我很好奇什麼是「正確」的方式來做到這一點。謝謝。 – 2010-07-20 12:59:48

+0

是的,你需要讀取所有行並連接它們。 – 2010-07-20 14:16:49

回答

1

我忘了更新此與一個swer,但鑑於@ EthanTowne的評論,我挖了我在做什麼在此代碼現在:

var o = from ords in cfg.db.OsGetUserOrders(userid) 
    select ords.XML_F52E5B62_58B1_21e2_B105_00805A49AB12; 
StringBuilder sb = new StringBuilder(); 
sb.AppendFormat("<orders>{0}</orders>", string.Join("", o.ToArray())); 
XElement xe = XElement.Parse(sb.ToString()); 

基本上,存儲過程返回多個order元素,而這種代碼覆羽他們到一個數組,然後將其拼接成一個字符串。然後我將它解析成一個XElement。可能有更好的方法,我可以接受其他解決方案。