One thing people often forget is that those query operator implementations are simply found using the typical C# method resolution rules. In particular, instance methods are considered before any extension methods are. It just so happens that the most typical LINQ implementations, such as LINQ to Objects and the
IQueryable<T>-based query providers, use extension methods on interfaces to define the query operators once and for all for all targeted data sources.
In short, you should realize that keywords such as
let all translate into “chains” of method calls, typically passing in lambda expressions for functional arguments such as filters, projections, key selectors, and so on. After ...