title: Build sql query object by lambda
body: <p>Can anybody advise a lib to build a raw sql code by lambda expression?
  Do not advise EF and Linq2sql because it doesn't provide a control over query.</p>
  
  <p>Something like this.
  It's the code from my own library. But I don't wish to support this if there is another good solution for this case.</p>
  
  <pre><code>[Fact]
  public void TotalTest()
  {
      var countFld = SqlField&lt;Person&gt;.Count(p =&gt; p.LastName);
      var select = new SqlSelect&lt;Person&gt;()
          .AddFields(p =&gt; p.LastName, p =&gt; p.Name)
          .AddFields&lt;Passport&gt;(p =&gt; p.Number)
          .AddField(countFld)
          .InnerJoin&lt;Person, Passport&gt;((person, passport) =&gt; person.Id == passport.PersonId)
          .Where(SqlFilter&lt;Passport&gt;.From(p =&gt; p.Number).IsNotNull().And(p =&gt; p.Number).NotEqualTo("3812-808316"))
          .GroupBy(p =&gt; p.LastName)
          .Having(SqlFilter&lt;Person&gt;.From&lt;int&gt;(countFld).GreaterThan(2))
          .OrderBy(p =&gt; p.LastName);
  
      var expected =
  @"SELECT
      pe.LastName, pe.Name, pa.Number, COUNT(pe.LastName)
  FROM
      Person pe
  INNER JOIN
      Passport pa ON pe.Id = pa.PersonId
  WHERE
      pa.Number IS NOT NULL AND pa.Number &lt;&gt; '3812-808316'
  GROUP BY
      pe.LastName
  HAVING
      COUNT(pe.LastName) &gt; 2
  ORDER BY
      pe.LastName";
      Assert.Equal(expected, select.CommandText);
  }
  </code></pre>