/// <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); }
/// <summary> /// 比较 /// </summary> /// <param name="orderByClip"></param> /// <returns></returns> public bool Equals(OrderByOperation orderByClip) { if (null == orderByClip) { return(false); } return(this.ToString().Equals(orderByClip.ToString())); }
/// <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); }
/// <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); }
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写法!请使用经典写法!"); }