public TResult Min <TResult>(Expression <Func <T, TResult> > minExpression) { SqlProvider.FormatMin(minExpression); return(DbCon.QuerySingleOrDefault <TResult>(SqlProvider.SqlString, SqlProvider.Params, dbTransaction)); }
/// <summary> /// 反射执行需要指向T类型的函数 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="sqlProvider"></param> /// <param name="methodName"></param> public void FormatSend <T>(QuerySet <T> querySet, string methodName) { SqlProvider sqlProvider = querySet.SqlProvider; //写入重新生成后的条件 if (WhereExpression != null && WhereExpression.Any()) { querySet.WhereExpressionList.AddRange(WhereExpression); } //因为表达式的原因,递归获取连表默认会倒序 if (sqlProvider.JoinList.Any()) { sqlProvider.JoinList.Reverse(); } switch (methodName) { case "Count": { sqlProvider.FormatCount(); } break; case "Sum": { var lambda = this.expression.Arguments[0].GetLambdaExpression(); sqlProvider.FormatSum(lambda); } break; case "Min": { var lambda = this.expression.Arguments[0].GetLambdaExpression(); sqlProvider.FormatMin(lambda); } break; case "Max": { var lambda = this.expression.Arguments[0].GetLambdaExpression(); sqlProvider.FormatMax(lambda); } break; case "Get": { LambdaExpression lambda = default(LambdaExpression); if (this.expression.Arguments.Count == 1) { lambda = this.expression.Arguments[0].GetLambdaExpression(); this.ReturnType = lambda.ReturnType; } else if (this.expression.Arguments.Count == 0) //无自定义列表返回 { lambda = null; this.ReturnType = this.expression.Method.ReturnType; } else { //带if判断 if (this.expression.Arguments[0].ToConvertAndGetValue().Equals(true)) { lambda = this.expression.Arguments[1].GetLambdaExpression(); } else { lambda = this.expression.Arguments[2].GetLambdaExpression(); } this.ReturnType = lambda.ReturnType; } sqlProvider.Context.Set.SelectExpression = lambda; sqlProvider.FormatGet <T>(); } break; case "ToList": { LambdaExpression lambda = default(LambdaExpression); if (this.expression.Arguments.Count == 1) { lambda = this.expression.Arguments[0].GetLambdaExpression(); this.ReturnType = lambda.ReturnType; } else if (this.expression.Arguments.Count == 0) //无自定义列表返回 { lambda = null; this.ReturnType = this.expression.Method.ReturnType.GenericTypeArguments[0]; } else { //带if判断 if (this.expression.Arguments[0].ToConvertAndGetValue().Equals(true)) { lambda = this.expression.Arguments[1].GetLambdaExpression(); } else { lambda = this.expression.Arguments[2].GetLambdaExpression(); } this.ReturnType = lambda.ReturnType; } sqlProvider.Context.Set.SelectExpression = lambda; sqlProvider.FormatToList <T>(); } break; default: throw new DapperExtensionException("Kogel.Dapper.Extension中子查询不支持的扩展函数"); } //得到解析的sql和param对象 string sql = sqlProvider.SqlString; var param = ToSubqueryParam(sqlProvider.Params, ref sql); _sqlCmd.Append(sql); this.Param.AddDynamicParams(param); }