/// <summary> /// 构建搜索表达式 /// </summary> /// <param name="builder"></param> /// <param name="actionBuilder"></param> /// <typeparam name="TSource"></typeparam> /// <returns></returns> public static IPagingQueryBuilder <TSource> Search <TSource> (this IPagingQueryBuilder <TSource> builder, Action <ISearchOptions <TSource> > actionBuilder) { var options = new SearchOptions <TSource> (builder.Parameter); actionBuilder(options); builder.Filter(options.BuildExpression()); return(builder); }
/// <summary> /// 增加 聚合结果 /// </summary> /// <param name="builder"></param> /// <param name="aggExpression"></param> /// <typeparam name="TSource"></typeparam> /// <typeparam name="TAggregate"></typeparam> /// <returns></returns> public static async Task <PageResult <TSource, TAggregate> > WithAggregateAsync <TSource, TAggregate> (this IPagingQueryBuilder <TSource> builder, Expression <Func <IGrouping <bool, TSource>, TAggregate> > aggExpression) { var aggregate = await builder.Query.GroupBy(t => true).Select(aggExpression).SingleAsync(); var result = await builder.ToPagingAsync(); return(new PageResult <TSource, TAggregate> (result, aggregate)); }