private void BuildList(SelectClause.List list) { _underlyingSelect.AddRange(list.Columns); foreach (var(orderExpression, orderDirection) in _order.Columns) { if (!TryUsingExistingColumn(list, orderExpression, orderDirection)) { AddInternalColumn(orderExpression, orderDirection); } } }
private bool TryUsingExistingColumn(SelectClause.List list, Expression orderExpression, OrderDirection orderDirection) { for (var i = 0; i < list.Columns.Count; i++) { var selectColumn = list.Columns[i]; if (!selectColumn.Expression.Equals(orderExpression)) { continue; } var columnName = GetProjectedColumnName(selectColumn, i); var expr = new Expression.Identifier(columnName, false); _orderColumns.Add((expr, orderDirection)); return(true); } return(false); }