public IOrderedMongoQueryable <Device> SortSource(IMongoQueryable <Device> source)
        {
            IOrderedMongoQueryable <Device> orderedSource = source.OrderBy(e => e.Id);

            string property       = string.Empty;
            bool   alreadyOrdered = false;
            bool   asc            = true;

            foreach (var item in Sort)
            {
                property = stringToPropertyName.FirstOrDefault(e => e.Key == item || e.Key == item.Substring(1)).Value.Trim();
                asc      = !item.StartsWith("-");

                if (alreadyOrdered)
                {
                    orderedSource = asc ? OrderThenAsc(orderedSource, property) : OrderThenDesc(orderedSource, property);
                }
                else
                {
                    orderedSource  = asc ? OrderAsc(orderedSource, property) : OrderDesc(orderedSource, property);
                    alreadyOrdered = true;
                }
            }

            return(orderedSource);
        }
        private IOrderedMongoQueryable <Device> OrderDesc(IOrderedMongoQueryable <Device> source, string property)
        {
            switch (property)
            {
            case nameof(Device.Id):
                source = source.OrderByDescending(e => e.Id);
                break;

            case nameof(Device.IsFavorite):
                source = source.OrderByDescending(e => e.IsFavorite);
                break;

            case nameof(Device.LastCommunication):
                source = source.OrderByDescending(e => e.LastCommunication);
                break;

            case alarmCount:
                source = source.OrderByDescending(e => e.Alarms.Count());
                break;

            default:
                break;
            }

            return(source);
        }
示例#3
0
        public async Task <IEnumerable <T> > AllAsync <TKey>(int page, int total, Expression <Func <T, bool> > where, Expression <Func <T, TKey> > orderBy)
        {
            IOrderedMongoQueryable <T> orderedMongoQueryable = MongoQueryable.OrderBy <T, TKey>(MongoQueryable.Take <T>(MongoQueryable.Skip <T>(MongoQueryable.Where <T>(IMongoCollectionExtensions.AsQueryable <T>(this.Collection), where), (page - 1) * total), total), orderBy);

            return(await IAsyncCursorSourceExtensions.ToListAsync <T>(orderedMongoQueryable, new CancellationToken()));
        }
 public static IOrderedMongoQueryable <T> ThenByDescending <T>(this IOrderedMongoQueryable <T> source, string property)
 {
     return(ApplyOrder(source, property, "ThenByDescending"));
 }