public static QuerySet <T> FromNothing <T>(Expression <Func <object, T> > Selector) { var ret = new QuerySet <T>(); var Params = new List <object>(); ret.fields = SelectorCompiler.GetFields(Selector.Body, new string[] { }, new string[] { }, Selector.Parameters, ref Params); ret.isFromNothing = true; ret.Params.AddRange(Params); return(ret); }
/// <summary> /// Select clause /// </summary> /// <typeparam name="T2"></typeparam> /// <param name="selector">Example:p=>new {p.Code,p.Name,FullName=p.Code+" "+p.FirstName}</param> /// <returns></returns> public QuerySet <T2> Select <T2>(Expression <Func <T, T2> > selector) { var ret = this.Clone <T2>(); var Params = this.Params; var tbls = this.table_names; if (!string.IsNullOrEmpty(this.table_name)) { tbls = new string[] { this.table_name }; } var selectFields = SelectorCompiler.GetFields(selector.Body, new string[] { ret.Schema }, tbls, selector.Parameters, ref Params); ret.Params = Params; ret.fields.Clear(); ret.fields.AddRange(selectFields); return(ret); }
public QuerySet <T> GroupBy(Expression <Func <T, object> > GroupFields) { var ret = this.Clone <T>(); var fieldBody = ((LambdaExpression)GroupFields).Body; var ParamList = ret.Params; var x = GroupFields.Parameters[0].Type == typeof(T); var tableNames = new List <string>(); if (this.table_names != null) { tableNames.AddRange(this.table_names); } if (!string.IsNullOrEmpty(this.table_name)) { tableNames.Add(this.table_name); } var groupFieldsList = SelectorCompiler.GetFields(fieldBody, new string[] { ret.Schema }, tableNames.ToArray(), GroupFields.Parameters.Cast <ParameterExpression>().ToList(), ref ParamList); ret.groupbyList.AddRange(groupFieldsList); return(ret); }
private static QuerySet <T> BuilJoin <T1, T2, T>(QuerySet <T1> qr1, QuerySet <T2> qr2, Expression <Func <T1, T2, bool> > JoinClause, Expression <Func <T1, T2, T> > selecttor, string JoinType) { var q1 = qr1 as QuerySet <T1>; var q2 = qr2 as QuerySet <T2>; if (q1.IsSubQuery()) { } if (q2.IsSubQuery()) { } var ret = new QuerySet <T>(); ret.joinTimes = (q1.joinTimes + 1) * 10 + q2.joinTimes; var ltName = "l" + ret.joinTimes.ToString(); var rtName = "r" + ret.joinTimes.ToString(); var Params = new List <object>(); Params.AddRange(q1.Params); Params.AddRange(q2.Params); var joinParams = new List <object>(); var strJoin = Joinner.GetJoinExpr(JoinClause.Body, new string[] { null, null }, new string[] { ltName, rtName }, JoinClause.Parameters, ref joinParams); strJoin = utils.RepairParameters(strJoin, Params, joinParams); Params.AddRange(joinParams); var leftSource = (!q1.IsSubQuery())? utils.GetSource(q1):"(" + q1.ToSQLString() + ")"; var rightSource = (!q2.IsSubQuery()) ? utils.GetSource(q2) : "(" + q2.ToSQLString() + ")"; rightSource = utils.RepairParameters(rightSource, q1.Params, q2.Params); ret.datasource = leftSource + " as " + Globals.Compiler.GetQName("", ltName) + " " + JoinType + " join " + rightSource + " as " + Globals.Compiler.GetQName("", rtName) + " on " + strJoin; var refTables = new List <string>(); var refParameters = new List <ParameterExpression>(); if (q1.table_names != null) { refTables.AddRange(q1.table_names); } if (q2.table_names != null) { refTables.AddRange(q2.table_names); } refTables.Add(ltName); refTables.Add(rtName); if (q1.fieldParams != null) { refParameters.AddRange(q1.fieldParams); } if (q2.fieldParams != null) { refParameters.AddRange(q2.fieldParams); } refParameters.AddRange(selecttor.Parameters); var retFields = SelectorCompiler.GetFields(selecttor.Body, new string[] { null, null }, refTables.ToArray(), refParameters.ToArray(), ref Params); ret.fields = retFields; ret.fieldParams = new List <ParameterExpression>(); ret.fieldParams.AddRange(refParameters); ret.parametersExpr = selecttor.Parameters; ret.Params = Params; ret.table_names = refTables.ToArray(); return(ret); }