Пример #1
0
        /// <summary>
        /// Convert this ordering node into an OData string representation.
        /// </summary>
        /// <returns>The OData string</returns>
        public static string ToODataString(this OrderByNode node)
        {
            string field     = ODataExpressionVisitor.ToODataString(node.Expression);
            string direction = node.Direction == OrderByDirection.Ascending ? "" : " desc";

            return($"{field}{direction}");
        }
        /// <summary>
        /// Translates an expression tree of <see cref="QueryNode"/> elements
        /// to an OData expression.
        /// </summary>
        /// <param name="filter">The top <see cref="QueryNode"/> representing the entire expression.</param>
        /// <returns>An OData string.</returns>
        public static string ToODataString(QueryNode filter)
        {
            if (filter == null)
            {
                return(string.Empty);
            }

            var visitor = new ODataExpressionVisitor();

            filter.Accept(visitor);
            return(visitor.Expression.ToString());
        }
Пример #3
0
        /// <summary>
        /// Converts the query structure into a standard OData URI protocol for queries.
        /// </summary>
        /// <param name="value">The <see cref="QueryDescription"/> to convert to OData.</param>
        /// <param name="parameters">A list of optional parameters to include in the query string.</param>
        /// <returns>A URI query string representing the query.</returns>
        public static string ToODataString(this QueryDescription value, IDictionary <string, string> parameters = null)
        {
            List <string> queryFragments = new();

            if (value.Filter != null)
            {
                string filterStr = ODataExpressionVisitor.ToODataString(value.Filter);
                queryFragments.Add($"{ODataOptions.Filter}={filterStr}");
            }

            if (value.Ordering.Count > 0)
            {
                var orderings = value.Ordering.Select(o => o.ToODataString());
                queryFragments.Add($"{ODataOptions.OrderBy}={string.Join(",", orderings)}");
            }

            if (value.Skip.HasValue && value.Skip >= 0)
            {
                queryFragments.Add($"{ODataOptions.Skip}={value.Skip}");
            }

            if (value.Top.HasValue && value.Top >= 0)
            {
                queryFragments.Add($"{ODataOptions.Top}={value.Top}");
            }

            if (value.Selection.Count > 0)
            {
                queryFragments.Add($"{ODataOptions.Select}={string.Join(",", value.Selection.Select(Uri.EscapeDataString))}");
            }

            if (value.IncludeTotalCount)
            {
                queryFragments.Add($"{ODataOptions.InlineCount}=true");
            }

            if (parameters?.Count > 0)
            {
                foreach (var kv in parameters)
                {
                    queryFragments.Add($"{Uri.EscapeDataString(kv.Key)}={Uri.EscapeDataString(kv.Value)}");
                }
            }

            return(string.Join("&", queryFragments));
        }