We saw Language Integrated Query (LINQ) for the first time in September 2005, when the LINQ Project was announced during the Professional Developers Conference (PDC 2005). We immediately realized the importance and the implications of LINQ for the long term. At the same time, we felt it would be a huge error to look to LINQ only for its capability to wrap access to relational data. This would be an error because the important concept introduced by LINQ is the growth in code abstraction that comes from using a consistent pattern that makes code more readable, without having to pay in terms of loss of control. We liked LINQ, we could foresee widespread use for it, but we were worried about the possible misperception of its key points. For these reasons, we started to think about writing a book about LINQ.
Our opportunity to write such a book began when our proposal was accepted by Microsoft Press. We wrote an initial short version of this book, Introducing Microsoft LINQ (Microsoft Press), which was based on beta 1 code. A second book, Programming Microsoft LINQ (Microsoft Press), comprehensively discussed LINQ in .NET 3.5. Readers provided a lot of feedback about both these books. We took both the positive and more importantly, the negative comments as opportunities to improve the book. Today, we are writing the preface to the third book about LINQ, Programming Microsoft LINQ in Microsoft .NET Framework 4, which we believe is a more mature book, full of useful content to help people develop real-world .NET solutions that leverage LINQ and new .NET 4.0 features!
After spending almost five years working with LINQ, this book represents a tremendous goal for us, but it is just the beginning for you. LINQ introduces a more declarative style of programming; it’s not a temporary trend. Anders Hejlsberg, the chief designer of C#, said that LINQ tries to solve the impedance mismatch between code and data. We think that LINQ is probably already one step ahead of other methods of resolving that dilemma because it can also be used to write parallel algorithms, such as when using the Parallel LINQ (PLINQ) implementation.
LINQ can be pervasive in software architectures because you can use it in any tier of an application; however, just like any other tool, it can be used effectively or not. We tried to address the most beneficial ways to use LINQ throughout the book. We suspect that at the beginning, you—as we did five years ago—will find it natural to use LINQ in place of relational database queries, but you’ll soon find that the ideas begin to pervade your approach to programming. This turning point happens when you begin writing algorithms that operate on in-memory data using LINQ to Objects queries. That should be easy. In fact, after only three chapters of this book, you will already have the knowledge required to do that. But in reality, that is the hardest part, because you need to change the way you think about your code. You need to start thinking in LINQ. We have not found a magic formula to teach this. Probably, like any big change, you will need time and practice to metabolize it.