act that query expressions are just based on patterns like this is a very powerful feature for flexibility - it&#39;s how LINQ to Rx is able to only implement the operators that make sense in that environment, for example. Similarly, there&#39;s nothing in the C# compiler that &quot;knows&quot; about IEnumerable&lt;T&gt; when it comes to query expressions - which is how entirely separate interfaces such as IObservable&lt;T&gt; work just as well.</p>  <h3>What have we learned?</h3>  <p>There&#39;s been a lot