LINQ adds features to C# that allow static SQL-like expressions to be used for querying data collections. Key features added include lambda expressions, extension methods, expression trees, list comprehension, anonymous types, and type inference. These features allow C# code to represent SQL queries as code that can then be translated to underlying data sources like databases. Expression trees in particular allow the lambda expressions to be represented as syntax trees that can be converted to executable queries like SQL at runtime. Many of the features added to C# with LINQ came from functional programming languages.