Example #1
0
        public static void SortList(List <IRecord> list, SortExpression sortExpression)
        {
            var comparer = new RecordComparer(sortExpression.FieldName);

            list.Sort(comparer);
            if (sortExpression.SortType == SortType.Descending)
            {
                list.Reverse();
            }
        }
Example #2
0
        public override IEnumerable <IRecord> RetreiveAll(QueryDefinition query)
        {
            var results      = new List <IRecord>();
            var cloneResults = Clone(GetRecordsOfType(query.RecordType).Where(r => query.RootFilter.MeetsFilter(r)), query.Fields).ToList();
            var newSorts     = new List <SortExpression>(query.Sorts);

            newSorts.Reverse();
            foreach (var sort in newSorts.Take(1))
            {
                var comparer = new RecordComparer(sort.FieldName);
                cloneResults.Sort(comparer);
                if (sort.SortType == SortType.Descending)
                {
                    cloneResults.Reverse();
                }
            }
            return(cloneResults);
        }
Example #3
0
        public override IEnumerable <IRecord> RetreiveAll(QueryDefinition query)
        {
            //okay this is initially implemented purely for querying an IEnumerable property of the primary object
            var objects = new List <IRecord>();

            foreach (var property in ObjectType.GetProperties())
            {
                if (property.PropertyType.GenericTypeArguments.Count() > 0 &&
                    property.PropertyType.GenericTypeArguments[0].AssemblyQualifiedName == query.RecordType)
                {
                    objects.AddRange(GetPropertyObjectsAsRecords(property.Name));
                }
            }
            if (!query.IsQuickFind)
            {
                if (query.RootFilter.SubFilters.Any() ||
                    query.RootFilter.Conditions.Count > 1 ||
                    (query.RootFilter.Conditions.Count == 1 && query.RootFilter.Conditions.First().ConditionType != ConditionType.Equal))
                {
                    throw new NotImplementedException("Queries With Conditions Are Not Implemented");
                }
            }
            else
            {
                if (query.QuickFindText != null)
                {
                    var quickFindToLower = query.QuickFindText.ToLower();
                    var props            = GetPropertyInfos(query.RecordType);
                    var quickFinds       = props
                                           .Where(p => p.GetCustomAttribute <QuickFind>() != null)
                                           .Select(p => p.Name)
                                           .ToArray();
                    if (!quickFinds.Any())
                    {
                        quickFinds = GetFieldMetadata(query.RecordType)
                                     .Where(p => p.Searchable)
                                     .Select(p => p.SchemaName)
                                     .ToArray();
                    }


                    objects = objects
                              .Where(o =>
                    {
                        var instance = ((ObjectRecord)o).Instance;
                        return(quickFinds
                               .Any(p =>
                        {
                            var propValue = instance.GetPropertyValue(p);
                            return propValue != null && propValue.ToString().ToLower().Contains(quickFindToLower);
                        }));
                    })
                              .ToList();
                }
            }
            var newSorts = new List <SortExpression>(query.Sorts);

            if (!newSorts.Any())
            {
                newSorts.OrderBy(o => o.ToString()).ToList();
            }
            else
            {
                newSorts.Reverse();
                foreach (var sort in newSorts.Take(1))
                {
                    var comparer = new RecordComparer(sort.FieldName);
                    objects.Sort(comparer);
                    if (sort.SortType == SortType.Descending)
                    {
                        objects.Reverse();
                    }
                }
            }
            objects = query.Top > 0
                ? objects.Take(query.Top).ToList()
                : objects;
            return(objects);
        }