示例#1
0
        public SLORMContext GroupBy(params string[] columnNames)
        {
            if (columnNames == null)
            {
                throw new ArgumentNullException(nameof(columnNames));
            }

            foreach (var currentColumnName in columnNames)
            {
                var column = ColumnsInTable.GetFromName(currentColumnName);
                if (column == null)
                {
                    continue;
                }

                var columnAlreadyInList = ColumnsToGroupBy.GetFromName(column.Name) != null;
                if (columnAlreadyInList)
                {
                    continue;
                }

                ColumnsToGroupBy.Add(column);
            }
            return(this);
        }
示例#2
0
        public async Task <ICollection <string> > GetColumnUniqueValues(string columnName)
        {
            // TODO: This method should be in the query builder.

            if (string.IsNullOrWhiteSpace(columnName))
            {
                throw new ArgumentNullException(columnName);
            }

            var uniqueValues = new List <string>();

            if (!ColumnsInTable.Any(c => c.Name == columnName))
            {
                return(uniqueValues);
            }

            await Connection.EnsureConnected();

            using (var command = Connection.CreateCommand())
            {
                command.CommandText = $"SELECT DISTINCT({columnName}) FROM {TableName}";
                using (var reader = command.ExecuteReader())
                    while (reader.Read())
                    {
                        uniqueValues.Add(reader[0].ToString());
                    }
            }
            return(uniqueValues);
        }
示例#3
0
 public bool IsQueryable()
 {
     if (!ColumnsInTable.Any())
     {
         return(false);
     }
     if (!ColumnsToGroupBy.Any() && !ColumnsToCount.Any() && !ColumnsToSum.Any())
     {
         return(false);
     }
     return(true);
 }
示例#4
0
        public SLORMContext Filter(ColumnFilterRequest filterRequest)
        {
            if (filterRequest == null)
            {
                throw new ArgumentNullException(nameof(filterRequest));
            }

            var column = ColumnsInTable.GetFromName(filterRequest.ColumnName);

            if (column == null)
            {
                return(this);
            }

            // Filtering incorrect value formats
            if (filterRequest.FilterRigor == FilterRigor.Equals)
            {
                switch (column.DataType)
                {
                case ColumnDataType.Number:
                    double parsedValue;
                    foreach (var currentValue in filterRequest.Values)
                    {
                        if (!double.TryParse(currentValue, out parsedValue))
                        {
                            return(this);
                        }
                    }
                    break;

                case ColumnDataType.Date:
                    DateTime parsedDateValue;
                    foreach (var currentValue in filterRequest.Values)
                    {
                        if (!DateTime.TryParse(currentValue, out parsedDateValue))
                        {
                            return(this);
                        }
                    }
                    break;
                }
            }

            var columnToFilter = new ColumnFilter(column, filterRequest);

            ColumnsToFilter.Add(columnToFilter);

            return(this);
        }
示例#5
0
        public SLORMContext Sum(string columnName)
        {
            var column = ColumnsInTable.GetFromName(columnName);

            if (column == null || column.DataType != ColumnDataType.Number)
            {
                return(this);
            }

            var columnAlreadyInList = ColumnsToSum.GetFromName(column.Name) != null;

            if (columnAlreadyInList)
            {
                return(this);
            }

            ColumnsToSum.Add(column);
            return(this);
        }
示例#6
0
        public SLORMContext OrderBy(ColumnOrderingRequest orderingRequest)
        {
            var column = ColumnsInTable.GetFromName(orderingRequest.ColumnName);

            if (column == null)
            {
                return(this);
            }

            var alreadyGroupedByColumn = ColumnsToGroupBy.GetFromName(column.Name) != null ||
                                         ColumnsToSum.GetFromName(column.Name) != null ||
                                         ColumnsToCount.GetFromName(column.Name) != null;

            if (!alreadyGroupedByColumn)
            {
                GroupBy(column.Name);
            }

            var columnOrdering = new ColumnOrdering(column, orderingRequest);

            ColumnsToOrderBy.Add(columnOrdering);

            return(this);
        }