Как читать большие XML RAW из Linq в SQL? - PullRequest
2 голосов
/ 20 июля 2010

Я довольно новичок в Linq для SQL и Linq в 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 Ответ

1 голос
/ 08 января 2015

Я забыл обновить это ответом, но, учитывая комментарий @ 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. Возможно, есть лучший способ, и я открыт для других решений.

...