public IEnumerable <GroupResult> Group(string byField, string extraField, SqlFunction f, string functionField,
                                               string havingSection)
        {
            var sb = new StringBuilder();

            sb.Append("SELECT " + byField);
            if (extraField + "" != "")
            {
                sb.Append(", " + extraField);
            }
            sb.Append(", " + f.ToString().ToUpper() + "(" + functionField + ")");
            sb.Append(" FROM " + Table.TableName);
            sb.Append(" WHERE " + GetCriteria());
            sb.Append(" GROUP BY " + byField);
            if (extraField + "" != "")
            {
                sb.Append(", " + extraField);
            }
            if (havingSection + "" != "")
            {
                sb.Append(" HAVING " + havingSection);
            }
            sb.Append(";");
            var sql         = sb.ToString();
            var fieldsNames = new List <string> {
                "groupedByField", "functionField"
            };

            if (extraField + "" != "")
            {
                fieldsNames.Insert(1, "extraField");
            }
            var fields = (from fn in fieldsNames
                          select typeof(GroupResult).GetField(fn)).ToList();
            var result =
                new QueryNonTableEnumerable <GroupResult>
                    (Table.MyDataSource, fields, sql);

            return(result);
        }
        public IEnumerable <GroupResult> Group(string byField, string extraField, SqlFunction f, string functionField,
                                               string havingSection)
        {
            var sb = new StringBuilder();

            sb.Append("SELECT " + byField);
            if (extraField + "" != "")
            {
                sb.Append(", " + extraField);
            }
            sb.Append(", " + f.ToString().ToUpper() + "(" + functionField + ")");
            sb.Append(" FROM " + FromSection);
            sb.Append(GetWhere(null));
            sb.Append(" GROUP BY " + byField);
            if (extraField + "" != "")
            {
                sb.Append(", " + extraField);
            }
            if (havingSection + "" != "")
            {
                sb.Append(" HAVING " + havingSection);
            }
            sb.Append(";");
            var sql = sb.ToString();
            var resultRecordFields = new List <string> {
                "groupedByField", "functionField"
            };

            if (extraField + "" != "")
            {
                resultRecordFields.Insert(1, "extraField");
            }
            var groupFields = (from fn in resultRecordFields
                               select typeof(GroupResult).GetField(fn)).ToList();
            var result =
                new QueryNonTableEnumerable <GroupResult>
                    (Src, groupFields, sql);

            return(result);
        }