protected virtual OrderByClause VisitOrderBy(OrderByClause orderBy) { if (orderBy == null) return null; var secondary = this.VisitOrderBy(orderBy.SecondarySortingClause); var flag = secondary != orderBy.SecondarySortingClause; var newOrderBy = new OrderByClause(secondary); foreach (var col in orderBy.SortColumns) { var newCol = this.Visit(col.Item1); newOrderBy.AppendColumn(Tuple.Create(newCol, col.Item2)); if (newCol != col.Item1) flag = true; } if (flag) return newOrderBy; return orderBy; }
private OrderByClause BuildNestedOrderBy(SelectExpression select, OrderByClause orderBy) { if (orderBy == null) return null; var newOrderBy = new OrderByClause(BuildNestedOrderBy(select, orderBy.SecondarySortingClause)); var columns = orderBy.SortColumns; var unmatchedColumns = new List<Expression>(); foreach (var col in columns) { Expression expr = select.TryFindColumn(col.Item1); if (expr == null) expr = select.AddUnmappedColumn(col.Item1); newOrderBy.AppendColumn(Tuple.Create(expr, col.Item2)); } return newOrderBy; }