protected void AddColumnSelectionAll <T>(string alias = null)
 {
     foreach (var keyValuePair in typeof(TEntity).GetProperties()
              .Where(p => WritablePropertyMatcher.TestIsDbField(p)).ToDictionary(p => p.Name, p => p.ColumnName()))
     {
         AddColumnSelection <T>(keyValuePair.Key, keyValuePair.Value, alias, Aggregation.None);
     }
 }
        protected void AppendColumnSelectionJoinOrUnion <T>(string alias = null)
        {
            var dictionary = typeof(TEntity).GetProperties()
                             .Where(p => !WritablePropertyMatcher.TestIsDbField(p))
                             .ToDictionary(p => p.Name,
                                           p => p.ColumnName());

            foreach (var joinsColumn in Specification
                     .JoinsColumns)
            {
                foreach (var keyValuePair in dictionary)
                {
                    var name = keyValuePair;
                    if (Specification.Columns
                        .Where(
                            s => s.ColumnName == name.Value)
                        .FirstOrDefault() == null && joinsColumn.Identifier == name.Value)
                    {
                        AddColumnSelection <T>(name.Key, name.Value, alias, Aggregation.None);
                    }
                }
            }
        }