2009-05-10 17 views
11

Mi pregunta es esencialmente simple, aunque estoy buscando una respuesta lo más exhaustiva posible aquí: ¿cómo funciona LINQ to XML entre bastidores?LINQ to XML - ¿Cómo funciona?

Ahora, he tenido una buena cantidad de experiencia trabajando con LINQ to XML para varias aplicaciones, por lo que sus interfaces no son nada extraño para mí, pero no tengo ni idea de cómo funcionan las partes internas. Ahora, tengo una idea general de cómo funcionan los proveedores de LINQ (implementando IQueryable y IQueryProvider y utilizando el patrón de visitante, en esencia). Sin embargo, no he podido descubrir nada sobre el proveedor de LINQ para LINQ a XML, incluso meterme con Reflector no me llevó a ninguna parte, aunque tal vez me estaba perdiendo lo obvio. Lo más interesante es que no pude encontrar ninguna evidencia de un proveedor de LINQ (implementación de IQueryProvider) dentro del ensamblado/espacio de nombres System.Xml.Linq.

Al observar el modelo LINQ a XML, me ha parecido una forma bastante única de LINQ en que las consultas LINQ y la sintaxis asociada no parecen tan integrales a la tecnología, y parece basarse más en alrededor de un modelo DOM cuestionable que proporciona muchos métodos de extensión útiles. Entonces, en realidad, lo que primero me gustaría saber es si LINQ to XML tiene incluso un proveedor de consultas en el sentido estándar (que LINQ to SQL tiene, por ejemplo), o es esencialmente un framework con métodos de extensión además del cual usted puede use LINQ to Objects para facilitar el uso. Además, también me llama la atención cómo se realiza el análisis sintáctico/conversión del código XML a la jerarquía DOM: ¿es XDocument similar al antiguo XmlDocument en este sentido? ¿Utiliza un XmlReader o similar detrás de escena para analizar e interpretar el documento al momento de la carga?

Esta es una pregunta muy abierta, por lo que cualquier tipo de información sobre cómo funciona LINQ to XML sería muy bienvenido. Mi intención aquí es principalmente crear una imagen de cómo se diseñó esta tecnología LINQ específica para que luego pueda intentar emularla yo mismo para un formato con estructura similar a XML.

Respuesta

13

LINQ to XML es realmente solo LINQ-to-Objects, que funciona en objetos que representan XML. Entonces, cuando escribe una consulta LINQ para recuperar nodos desde un XDocument (por ejemplo), en realidad está invocando métodos de extensión que devuelven IEnumerable <T> e invocando los operadores de consulta estándar como están definidos para IEnumerable <T>.

Por lo tanto, se podría decir que LINQ-to-XML consiste principalmente en la familia XElement de clases que representan XML y los muchos métodos de extensión que se proporcionan para aquellos, a fin de facilitar las consultas.

Esto también se explica here.

+0

Sí, esto es más o menos lo que sospechaba. Gracias por la info. – Noldorin

Cuestiones relacionadas