/// <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; }
/// <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); }