public async Task TestAggregateFunc() { var dr = await CreateDriver(); var d = await dr.From <MyModel>() .Select(x => AggregateFunc.Max(x.Id)) .ToSingleAsync(); Assert.Equal(3, d); }
public void FuncAggregateMaxMin() { var q1 = Builders <MyModel> .Select(x => AggregateFunc.Max(x.Id)).Where(x => x.DateTime > Func.Now()); Utils.AssertRawQuery(q1, @"SELECT MAX(""id"") FROM model WHERE (datetime) > (NOW())"); var q2 = Builders <MyModel> .Select(x => AggregateFunc.Min(x.Id)).Where(x => x.DateTime > Func.Now()); Utils.AssertRawQuery(q2, @"SELECT MIN(""id"") FROM model WHERE (datetime) > (NOW())"); }
public void FuncAggregateSum() { var q1 = Builders <MyModel> .Select(x => AggregateFunc.Sum(x.ValFloat)); Utils.AssertRawQuery(q1, @"SELECT SUM(val_f32) FROM model"); }
/// <summary> /// 查询极值 /// </summary> /// <typeparam name="C">极值的类型</typeparam> /// <param name="predicate">查询条件</param> /// <param name="selector">返回值</param> /// <param name="aggregateFunc">返回的极值,极大值、极小值</param> /// <returns>返回极值</returns> public C FindExtreProp <C>(Expression <Func <TEntity, bool> > predicate, Expression <Func <TEntity, C> > selector, AggregateFunc aggregateFunc) { using (DbContext dbContext = CreateDbContext()) { IQueryable <TEntity> query = dbContext.Set <TEntity>().AsNoTracking().Where(predicate); if (aggregateFunc == AggregateFunc.MAX) { return(query.Max(selector)); } else if (aggregateFunc == AggregateFunc.MIN) { return(query.Min(selector)); } else { throw new Exception("枚举只能使用MAX、MIN"); } } }