public virtual void VisitOrderByClause(OrderByClause node)
 {
     foreach (KeyValuePair<Expression, OrderDirection> pair in node.ExpressionToOrderDirectionMap)
     {
         Visit(pair.Key);
     }
 }
		public override void VisitOrderByClause(OrderByClause node)
		{
			WriteKeyword(KeyWordWriter.LinqOrderBy);
			WriteSpace();

			for (int i = 0; i < node.ExpressionToOrderDirectionMap.Count; i++)
			{
				if (i > 0)
				{
					Write(", ");
				}
				Visit(node.ExpressionToOrderDirectionMap[i].Key);
				if (node.ExpressionToOrderDirectionMap[i].Value == OrderDirection.Descending)
				{
					WriteSpace();
					WriteKeyword(KeyWordWriter.LinqDescending);
				}
			}
		}
            private bool TryProcessOrderByMethod(MethodInvocationExpression methodInvoke, bool ascending, bool queryable)
            {
                Expression key;
                if (!TryProcessSingleParameterQuery(methodInvoke, true, queryable, out key))
                {
                    return false;
                }

                OrderByClause orderBy = new OrderByClause(new PairList<Expression, OrderDirection>(), null);
                orderBy.ExpressionToOrderDirectionMap.Add(key, ascending ? OrderDirection.Ascending : OrderDirection.Descending);
                clauses.Add(orderBy);

                return true;
            }