【问题标题】:Linq To XML, yield and othersLinq To XML、yield 等
【发布时间】:2011-08-05 13:58:14
【问题描述】:

我想知道是否有 .NET 库或 3rd 方工具来执行实体框架,如对 XML 文档的 LINQ 查询。我知道已经有 LINQ to XML,它允许您对 已经加载到内存中XDocument 对象执行查询,但是如果 XML 文档的大小非常大(超过 1 GB)怎么办?

我希望可以选择将此查询交给XmlReader 而不是XDocument 对象。可以直接开箱即用吗?

【问题讨论】:

标签: c# .net linq linq-to-xml


【解决方案1】:

【讨论】:

  • 正是我想要的,我也喜欢它的编码方式!谢谢!
【解决方案2】:

我不相信您会有适合所有 XML 文档的解决方案,但您可以做到。

我将创建一个实现IEnumerable<T> 的类,并采用您想要流式传输的XmlReader

然后,我将在您的IEnumerable<T> 实现中创建将用于类型参数T 的类型。

一旦你有了它,在你的GetEnumerator 的实现中,你将调用XmlReader 上的各种Move*Read* 方法,这将允许你构造T 的单个实例。

当您拥有T 的实例时,您将使用yield return 来生成该项目。 GetEnumerator 的其余部分将在您通过 XmlReader 流式传输时适当地循环。

有了这些,您将在获得T 的实例时对其进行流式传输,而无需首先将整个文档加载到内存中。

当然,您必须测试一次要阅读多少文档。

【讨论】:

  • 谢谢,使用您上面提到的技术找到了一些类似的解决方案,但我喜欢发布的 3rd 方工具 jdv。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多