public override SqlString ToSqlString(ICriteria criteria, int loc, ICriteriaQuery criteriaQuery, IDictionary <string, IFilter> enabledFilter)
        {
            if (ParameterValues != null && ParameterValues.Length > 0)
            {
                var sql = new SqlStringBuilder();
                sql.Add(aggregate).Add("(");
                bool hasProperty  = false;
                bool hasParameter = false;

                for (int i = 0; i < ParameterValues.Length; i++)
                {
                    if (PropertyPosition == i)
                    {
                        if (i > 0)
                        {
                            sql.Add(", ");
                        }
                        sql.Add(criteriaQuery.GetColumn(criteria, propertyName)).Add(", ");
                        hasProperty = true;
                    }
                    else if (i > 0)
                    {
                        sql.Add(", ");
                    }

                    sql.Add(LinqUtil.SqlEncode(ParameterValues[i]));
                    hasParameter = true;
                }
                if (!hasProperty)
                {
                    if (hasParameter)
                    {
                        sql.Add(", ");
                    }
                    sql.Add(criteriaQuery.GetColumn(criteria, propertyName));
                }

                return(sql.Add(") as y").Add(loc.ToString()).Add("_").ToSqlString());
            }

            // if ParameterValues were not specified, we defer to the base functionality
            return(base.ToSqlString(criteria, loc, criteriaQuery, enabledFilter));
        }