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