C# Linq到XML、yield和其他

C# Linq到XML、yield和其他,c#,.net,linq,linq-to-xml,C#,.net,Linq,Linq To Xml,我想知道是否有一个.NET库或第三方工具来执行实体框架,比如XML文档上的LINQ查询。我知道已经有LINQ to XML,它允许您对XDocument对象执行查询,该对象已经加载到内存中了,但是如果XML文档的大小非常大(超过千兆字节),该怎么办 我希望可以选择将此查询交给XmlReader而不是XDocument对象。这可能是开箱即用吗?我不相信您会有一个适合所有XML文档的解决方案,但您可以做到 我将创建一个类,该类实现并接受您想要流式传输的 然后,我将创建类型,该类型将用于实现IEnum

我想知道是否有一个.NET库或第三方工具来执行实体框架,比如XML文档上的LINQ查询。我知道已经有LINQ to XML,它允许您对
XDocument
对象执行查询,该对象已经加载到内存中了,但是如果XML文档的大小非常大(超过千兆字节),该怎么办


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

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

我将创建一个类,该类实现并接受您想要流式传输的

然后,我将创建类型,该类型将用于实现
IEnumerable
中的类型参数
T

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

当您手头有一个
T
实例时,您将使用
yield return
来生成项目。
GetEnumerator
主体的其余部分将在流经
XmlReader
时适当循环

有了它,您就可以在获得
T
的实例时对其进行流式处理,而不必首先将整个文档加载到内存中


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

看一看

好的,在搜索了一点之后,我遇到了这样一个线程:这个:我一直在考虑使用几乎完全相同的技术来解决这个问题,但是它仍然缺乏充分的支持和更好的性能。这正是我想要的,我也喜欢它的编码方式!谢谢谢谢,我发现了一些使用上述技术的类似解决方案,但我喜欢jdv发布的第三方工具。