Linq To XML, доходность и другие

Мне было интересно, есть ли библиотека .NET или сторонний инструмент для выполнения Entity Framework, такой как запросы LINQ в XML-документах. Я знаю, что уже есть LINQ to XML, который позволяет выполнять запросы в XDocument объекте, который УЖЕ загружен в память, но что, если XML-документ чрезвычайно большой по размеру (более гигабайт)?

Я хотел бы иметь возможность передать этот запрос в XmlReader вместо объекта XDocument. Возможно ли это прямо из коробки?

Ответ 2

Я не верю, что у вас будет решение, соответствующее всем XML-документам, но вы можете это сделать.

Я бы создал класс, который реализует IEnumerable<T> и принимает XmlReader, который вы хотите передать.

Затем я создам тип, который будет использоваться для параметра типа T в вашей реализации IEnumerable<T>.

Как только вы это сделаете в своей реализации GetEnumerator, вы будете называть различные методы Move* и Read* на XmlReader, который позволит вам создать единственный экземпляр T.

Если у вас есть экземпляр T in-hand, вы должны использовать yield return, чтобы получить элемент. Остальная часть тела GetEnumerator будет циклически перемещаться по потоку через XmlReader.

С этим в руке вы будете передавать экземпляры T по мере их получения, не загружая весь документ в первую очередь.

Вам нужно, конечно, проверить, какую часть документа вы хотите читать за раз.