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(); } }
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); }
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); }