Remotion.Linq.SqlBackend.SqlPreparation.SqlPreparationSubStatementTableFactory.CreateSqlCompatibleSubStatementTable C# (CSharp) Method

CreateSqlCompatibleSubStatementTable() private method

private CreateSqlCompatibleSubStatementTable ( SqlStatement originalStatement, Expression newSelectProjection, SqlTable>.Func tableCreator ) : SqlTable
originalStatement Remotion.Linq.SqlBackend.SqlStatementModel.SqlStatement
newSelectProjection System.Linq.Expressions.Expression
tableCreator SqlTable>.Func
return Remotion.Linq.SqlBackend.SqlStatementModel.SqlTable
    private SqlTable CreateSqlCompatibleSubStatementTable (
        SqlStatement originalStatement, 
        Expression newSelectProjection, 
        Func<ITableInfo, SqlTable> tableCreator)
    {
      // create a new statement equal to the original one, but with the tuple as its select projection
      var builder = new SqlStatementBuilder (originalStatement) { SelectProjection = newSelectProjection };
      builder.RecalculateDataInfo (originalStatement.SelectProjection);

      // clear orderings unless required for TopExpression
      if (originalStatement.TopExpression == null)
        builder.Orderings.Clear();
        
      var newSqlStatement = builder.GetSqlStatement();

      // put new statement into a sub-statement table
      var subStatementTableInfo = new ResolvedSubStatementTableInfo (_uniqueIdentifierGenerator.GetUniqueIdentifier ("q"), newSqlStatement);
      return tableCreator (subStatementTableInfo);
    }