Ответ 1
Посмотрите этот проект codeplex.
Мне было интересно, есть ли библиотека .NET или сторонний инструмент для выполнения Entity Framework, такой как запросы LINQ в XML-документах. Я знаю, что уже есть LINQ to XML, который позволяет выполнять запросы в XDocument
объекте, который УЖЕ загружен в память, но что, если XML-документ чрезвычайно большой по размеру (более гигабайт)?
Я хотел бы иметь возможность передать этот запрос в XmlReader
вместо объекта XDocument
. Возможно ли это прямо из коробки?
Посмотрите этот проект codeplex.
Я не верю, что у вас будет решение, соответствующее всем XML-документам, но вы можете это сделать.
Я бы создал класс, который реализует IEnumerable<T>
и принимает XmlReader
, который вы хотите передать.
Затем я создам тип, который будет использоваться для параметра типа T
в вашей реализации IEnumerable<T>
.
Как только вы это сделаете в своей реализации GetEnumerator
, вы будете называть различные методы Move*
и Read*
на XmlReader
, который позволит вам создать единственный экземпляр T
.
Если у вас есть экземпляр T
in-hand, вы должны использовать yield return
, чтобы получить элемент. Остальная часть тела GetEnumerator
будет циклически перемещаться по потоку через XmlReader
.
С этим в руке вы будете передавать экземпляры T
по мере их получения, не загружая весь документ в первую очередь.
Вам нужно, конечно, проверить, какую часть документа вы хотите читать за раз.