Unitive
Before LINQ, developers who queried data frequently needed to master multiple technologies. They needed to learn the following:
- SQL to query a database
- XPath, Dom, XSLT, or XQuery to query and transform XML data
- Web services to access some forms of remote data
- Looping and branching to query the collections in their own programs
These diverse APIs and technologies forced developers to frantically juggle their tight schedules while struggling to run similar queries against dissimilar data sources. Projects often encountered unexpected delays simply because it was easier to talk about querying XML, SQL, and other data than it was to actually implement the queries against these diverse data sources. If you have to juggle too many technologies, eventually something important will break.
LINQ simplifies these tasks by providing a single, unified method for querying diverse types of data. Developers don’t have to master a new technology simply because they want to query a new data source. They can call on their knowledge of querying local collections when they query relational data, and vice versa.
This point was illustrated in the preceding chapter, where you saw three very similar queries that drew data from three different data sources: objects, an SQL database, and XML:
var query = from c in GetCustomers() where c.City == "Mexico D.F." select new { City = c.City, ContactName = c.ContactName }; var query = from c in db.Customers where c.City == "Mexico D.F." select new { City = c.City, ContactName = c.ContactName }; var query = from x in customers.Descendants("Customer") where x.Attribute("City").Value == "Mexico D.F." select x;
As you can see, the syntax for each of these queries is not identical, but it is very similar. This illustrates one of LINQ’s core strengths: a single, unitive syntax can be used to query diverse types of data. It is not that you never have to scale a learning curve when approaching a new data source, but only that the principles, overall syntax, and theory are the same even if some of the details differ.
You enjoy two primary benefits because LINQ is unitive:
- The similar syntax used in all LINQ queries helps you quickly get up to speed when querying new data sources.
- Your code is easier to maintain, because you are using the same syntax regardless of the type of data you query.
Although it arises naturally from this discussion, it is worth noting that SQL and other query languages do not have this capability to access multiple data sources with a single syntax. Those who advocate using SQL or the DOM instead of LINQ often forget that their decision forces their team to invest additional time in learning these diverse technologies.