コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: QuerySet.cs プロジェクト: gnoleht/dn-gnol
        /// <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);
        }
コード例 #3
0
ファイル: QuerySet.cs プロジェクト: gnoleht/dn-gnol
        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);
        }
コード例 #4
0
        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);
        }