如何从Linq到SQL读取大型XML RAW?

时间:2010-07-19 20:31:25

标签: c# linq linq-to-sql linq-to-xml

我对Linq to SQL&amp ;; Linq to XML但将一些代码拼凑在一起,将存储过程中的XML结果放入XElement中。然而,它开始失败了,显然现在XML数据变得越来越大(2K +)而我的.Parse正在读取截断的XML(XML数据又回来了两行)。在我开始使用xmlReaders和所有这些开始摸索杂草之前,也许我正在看这个错误并且有更好的方法。

我的确切问题如下,但我也很好奇任何标准的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>

1 个答案:

答案 0 :(得分:1)

我忘了用答案更新这个,但是根据@ 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。这可能是更好的方式,我可以接受其他解决方案。