My question is essentially a simple one, though I'm looking for as in-depth an answer possible here: how does LINQ to XML work behind the scenes?
Now, I have had a fair amount of experience working with LINQ to XML for various applications, so it's interfaces is nothing strange to me, but I am quite clueless as to how the internals operate. Now, I do have some understanding of generally how LINQ providers work (implementing IQueryable
and IQueryProvider
and utilising the visitor pattern, in essence). However, I haven't been able to discover anything about the LINQ provider for LINQ to XML - even messing around with Reflector didn't get me anywhere, though perhaps I was missing the obvious. Most interestingly, I wasn't able to find any evidence of a LINQ provider (implementation of IQueryProvider
) within the System.Xml.Linq
assembly/namespace.
From observing the LINQ to XML model, it has struck me as a rather unique form of LINQ in that LINQ queries and the associated syntax don't seem quite so integral to the technology, and it rather seems to be based more around a queryable DOM model that provides a lot of useful extension methods. So really, what I would firstly like to know is, does LINQ to XML even have a query provider in the standard sense (that LINQ to SQL has for example), or is it essentially a framework with extension methods on top of which you can use LINQ to Objects to facilitate usage. In addition, I'm also curious how the parsing/conversion from XML code to the DOM hierarchy is done - is XDocument
qutie similar to the old XmlDocument
in this sense? Does it use an XmlReader
or such behind the scenes to parse and interpret the document upon load?
This is very much an open ended question, so any sort of information regarding how LINQ to XML operates behind the scenes would be most welcome. My intention here is primarily to build up a picture of how this specific LINQ technology was designed so that I might subsequently attempt to emulate it myself for a format with similar structure to XML.