Exemple #1
0
        /// <summary>
        /// 两个OrderByClip相加
        /// </summary>
        /// <param name="leftOrderByOpt"></param>
        /// <param name="rightOrderByOpt"></param>
        /// <returns></returns>
        public static OrderByOperation operator &(OrderByOperation leftOrderByOpt, OrderByOperation rightOrderByOpt)
        {
            if (IsNullOrEmpty(leftOrderByOpt) && IsNullOrEmpty(rightOrderByOpt))
            {
                return(None);
            }

            if (IsNullOrEmpty(leftOrderByOpt))
            {
                return(rightOrderByOpt);
            }
            if (IsNullOrEmpty(rightOrderByOpt))
            {
                return(leftOrderByOpt);
            }


            OrderByOperation orderby = new OrderByOperation();

            foreach (KeyValuePair <string, OrderByOperater> kv in leftOrderByOpt.orderByOperation)
            {
                orderby.orderByOperation.Add(kv.Key, kv.Value);
            }

            foreach (KeyValuePair <string, OrderByOperater> kv in rightOrderByOpt.orderByOperation)
            {
                if (!orderby.orderByOperation.ContainsKey(kv.Key))
                {
                    orderby.orderByOperation.Add(kv.Key, kv.Value);
                }
            }

            return(orderby);
        }
Exemple #2
0
 /// <summary>
 /// 比较
 /// </summary>
 /// <param name="orderByClip"></param>
 /// <returns></returns>
 public bool Equals(OrderByOperation orderByClip)
 {
     if (null == orderByClip)
     {
         return(false);
     }
     return(this.ToString().Equals(orderByClip.ToString()));
 }
Exemple #3
0
 /// <summary>
 /// 判断 OrderByClip  是否为null
 /// </summary>
 /// <param name="orderByClip"></param>
 /// <returns></returns>
 public static bool IsNullOrEmpty(OrderByOperation orderByClip)
 {
     if ((null == orderByClip) || string.IsNullOrEmpty(orderByClip.ToString()))
     {
         return(true);
     }
     return(false);
 }
Exemple #4
0
        /// <summary>
        /// 去掉的表前缀
        /// </summary>
        /// <returns></returns>
        public OrderByOperation RemovePrefixTableName()
        {
            OrderByOperation tempOrderByClip = new OrderByOperation();

            foreach (KeyValuePair <string, OrderByOperater> kv in this.orderByOperation)
            {
                string keyName = kv.Key;
                if (kv.Key.IndexOf('.') > 0)
                {
                    keyName = keyName.Substring(keyName.IndexOf('.') + 1);
                }

                tempOrderByClip.orderByOperation.Add(keyName, kv.Value);
            }

            return(tempOrderByClip);
        }
Exemple #5
0
 private static OrderByOperation ToOrderByClipChild(string tableName, System.Linq.Expressions.Expression exprBody, OrderByOperater orderBy)
 {
     if (exprBody is MemberExpression)
     {
         var e = (MemberExpression)exprBody;
         OrderByOperation gb = OrderByOperation.None;
         var filedProp       = GetFieldName(e.Member);
         if (orderBy == OrderByOperater.DESC)
         {
             gb = gb && CreateField(tableName, filedProp, e.Expression.Type).Desc;
         }
         else
         {
             gb = gb && CreateField(tableName, filedProp, e.Expression.Type).Asc;
         }
         return(gb);
     }
     if (exprBody is NewExpression)
     {
         var exNew           = (NewExpression)exprBody;
         var type            = exNew.Constructor.DeclaringType;
         var list            = new List <string>(exNew.Arguments.Count);
         OrderByOperation gb = OrderByOperation.None;
         foreach (MemberExpression member in exNew.Arguments)
         {
             var filedProp = GetFieldName(member.Member);
             if (orderBy == OrderByOperater.DESC)
             {
                 gb = gb && CreateField(tableName, filedProp, member.Expression.Type).Desc;
             }
             else
             {
                 gb = gb && CreateField(tableName, filedProp, member.Expression.Type).Asc;
             }
         }
         return(gb);
     }
     if (exprBody is UnaryExpression)
     {
         var ueEx = (UnaryExpression)exprBody;
         return(ToOrderByClipChild(tableName, ueEx.Operand, orderBy));
     }
     throw new Exception("暂时不支持的Order by lambda写法!请使用经典写法!");
 }