Ejemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="type"></param>
        /// <param name="bDataBase"></param>
        /// <param name="bWithLock"></param>
        /// <param name="bNeedParams"></param>
        /// <param name="bNeedQueryProvider"></param>
        protected DMS(Type type, string bDataBase, bool bWithLock, bool bNeedParams, bool bNeedQueryProvider)
        {
            DMSFrameException.ThrowIfNull(type);

            this.DataType    = type;
            this.CurrentType = type;
            TableMappingAttribute attribute = DMSExpression.GetTableMappingAttribute(type);

            this.TableExpressioin   = DMSExpression.GetTableExpression(attribute.DMSDbType);
            this.ColumnsExpressioin = DMSExpression.GetColumnsExpression(attribute.DMSDbType);
            this.WhereExpressioin   = DMSExpression.GetWhereExpression(attribute.DMSDbType);
            this.OrderByExpressioin = DMSExpression.GetOrderByExpression(attribute.DMSDbType);
            this.GroupByExpression  = DMSExpression.GetGroupByExpression(attribute.DMSDbType);
            this.HavingExpression   = DMSExpression.GetHavingExpression(attribute.DMSDbType);
            this.SplitExpression    = DMSExpression.GetSplitExpression(attribute);
            this.Provider           = DMSExpression.GetDbProvider(attribute.DMSDbType, attribute.ConfigName);

            this.dynamicParameters = new DynamicParameters();

            DMSFrameException.ThrowIfNull(this.TableExpressioin, this.ColumnsExpressioin, this.WhereExpressioin, this.OrderByExpressioin, this.GroupByExpression, this.HavingExpression);

            if (!string.IsNullOrEmpty(bDataBase))
            {
                this.TableExpressioin.bDataBase = bDataBase;
                DMSDataBase myDb = new DMSDataBase(bDataBase);
                this.TableExpressioin.Append <DMSDataBase, DMSDataBase>(q => myDb);
            }
            this.TableExpressioin.WithLock = bWithLock;
            this.ExcuteType = DMSExcuteType.SELECT;

            this.TableExpressioin.NeedParams   = bNeedParams;
            this.ColumnsExpressioin.NeedParams = bNeedParams;
            this.WhereExpressioin.NeedParams   = bNeedParams;
            this.OrderByExpressioin.NeedParams = bNeedParams;
            this.GroupByExpression.NeedParams  = bNeedParams;
            this.HavingExpression.NeedParams   = bNeedParams;


            this.TableExpressioin.SplitExpression   = this.SplitExpression;
            this.ColumnsExpressioin.SplitExpression = this.SplitExpression;
            this.WhereExpressioin.SplitExpression   = this.SplitExpression;
            this.OrderByExpressioin.SplitExpression = this.SplitExpression;
            this.GroupByExpression.SplitExpression  = this.SplitExpression;
            this.HavingExpression.SplitExpression   = this.SplitExpression;
        }
Ejemplo n.º 2
0
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <typeparam name="T1"></typeparam>
        /// <typeparam name="TResult"></typeparam>
        /// <param name="dms"></param>
        /// <param name="JoinType"></param>
        /// <param name="inner"></param>
        /// <param name="whereFunc"></param>
        /// <param name="selector"></param>
        /// <returns></returns>
        internal static DMS <TResult> Join <T, T1, TResult>(this DMS <T> dms, DMSJoinType JoinType, DMS <T1> inner, Expression <Func <T, T1, bool> > whereFunc,
                                                            Expression <Func <T, T1, TResult> > selector)
            where T : class
            where T1 : class
            where TResult : class
        {
            if (dms.ExpressionParserChangedFlag)
            {
                if (dms.ColumnsExpressioin.Expression == null)
                {
                    ////防止没有SELECT的现象
                    ParameterExpression xExpr      = Expression.Parameter(dms.DataType, "x");
                    LambdaExpression    lambdaExpr = Expression.Lambda(xExpr, xExpr);
                    dms.ColumnsExpressioin.Append(lambdaExpr);
                }
                AnalyzeExpressionSelectPacker <T, T>(dms);
            }
            else
            {
                //if (dms.TableExpressioin.TableKeys != null)
                //{
                //    DMSTableKeys lastTableKeys = dms.TableExpressioin.TableKeys.LastOrDefault();
                //    if (lastTableKeys.AssemblyQualifiedName != typeof(T).AssemblyQualifiedName)
                //    {
                //        dms.SplitExpression.AnalyzeExpressionSelectPacker(lastTableKeys.TableSpecialName, typeof(T));
                //    }
                //}
            }

            DMS <TResult> result = new DMS <TResult>(dms);

            if (typeof(T).Name.StartsWith("<>f__AnonymousType"))
            {
                Expression <Func <object, object> > As = q => dms.Provider.As;
                result.TableExpressioin.Append(As);
                result.TableExpressioin.Append <T, T>(item => item);
            }
            else
            {
                //result.TableExpressioin.Append<TResult, TResult>(item => item);
            }
            switch (JoinType)
            {
            case DMSJoinType.INNERJOIN:
            default:
                Expression <Func <string, string> > InnerJoin0 = q => dms.Provider.InnerJoin;
                result.TableExpressioin.Append(InnerJoin0);
                break;

            case DMSJoinType.LEFTJOIN:
                Expression <Func <string, string> > InnerJoin1 = q => dms.Provider.LeftJoin;
                result.TableExpressioin.Append(InnerJoin1);
                break;

            case DMSJoinType.RIGHTJOIN:
                Expression <Func <string, string> > InnerJoin2 = q => dms.Provider.RightJoin;
                result.TableExpressioin.Append(InnerJoin2);
                break;
            }
            if (inner.ExpressionParserChangedFlag)
            {
                Log.Debug(ReflectionUtils.GetMethodBaseInfo(System.Reflection.MethodBase.GetCurrentMethod()), "暂不支持后面的表有条件限制", null);
                throw new DMSFrameException("暂不支持后面的表有条件限制");
            }
            else
            {
                if (!string.IsNullOrEmpty(inner.TableExpressioin.bDataBase))
                {
                    DMSDataBase myDb = new DMSDataBase(inner.TableExpressioin.bDataBase);
                    result.TableExpressioin.Append <string, DMSDataBase>(q => myDb);
                }
                Expression <Func <T1, T1> > innerTable = q => q;
                result.TableExpressioin.Append(innerTable);
            }
            Expression <Func <string, string> > On = q => dms.Provider.On;

            result.TableExpressioin.Append(On);

            result.WhereExpressioin.Append <T, T1>(whereFunc);
            result.ColumnsExpressioin.Append <T, T1, TResult>(selector);

            result.TableExpressioin.JoinFlag = true;
            return(result);
        }