LINQ is a set of technologies that allow simple and ecient querying over dierent kinds of data.
Data can be stored in various types of containers – C# data structures like Lists or arrays, databases, XML documents, and many more. LINQ allows us to query such data in a uniform way, allowing the programmer to focus on what the program is supposed to do with the data, not on the technical details of accessing dierent data containers. We can use dierent LINQ providers, like LINQ to SQL that allows querying over SQL databases, or LINQ to XML that allows querying over XML documents. Each LINQ provider must implement IQueryProvider and IQueryable interfaces. We can create our own LINQ providers if we need to support querying over a new type of data container.