title: Linq Query Expanding
body: <p>I have a string array named Products &amp; I am working on Anonymous Methods (Lambda Exprs.) &amp; Linq.
  So first I wrote;</p>
  
  <pre><code>var resultSet1 = from p in products 
                   where p.StartsWith("M") 
                   orderby p descending  
                   select p;
  </code></pre>
  
  <p>Then I expand it with Lambda Expressions;</p>
  
  <pre><code>var resultSet2 = products
                   .Where(p =&gt; p.StartsWith("M"))
                   .OrderByDescending(p =&gt; p)
                   .Select(p =&gt; p);
  </code></pre>
  
  <p>Then I expand it with Anonymous Methods;</p>
  
  <pre><code>var resultSet3 = products
                  .Where(delegate(string p) { return p.StartsWith("M"); })
                  .OrderByDescending(delegate(string p) { return p; })
                  .Select(delegate(string p) { return p; });
  </code></pre>
  
  <p>Then I expand it with Manual Methods and Func&lt;> Delegates;</p>
  
  <pre><code>Func&lt;string, bool&gt; filterFunc = new Func&lt;string, bool&gt;(Filter);
  Func&lt;string, string&gt; orderAndSelectFunc = new Func&lt;string, string&gt;(OrderAndSelect);
  var resultSet4 = products.Where(filterFunc).OrderByDescending(orderAndSelectFunc).Select(orderAndSelectFunc);
  
  static bool Filter(string p) { return p.StartsWith("M"); }
  static string OrderAndSelect(string p) { return p; }
  </code></pre>
  
  <p>Then I stuck. So my question is; can I expand this a bit more with replacing Func&lt;> delegate with normal delegates? Or something like that?</p>