// Copyright (c) The Geekeey Authors // SPDX-License-Identifier: EUPL-1.2 using System.Linq.Expressions; namespace Geekeey.Request.Persistence; /// /// Provides extension methods for . /// public static class OrderedBuilderExtensions { /// /// Adds a ThenBy expression for secondary ordering. /// /// The ordered builder. /// The expression. /// The entity type. /// The ordered builder. public static OrderedSpecificationBuilder ThenBy(this OrderedSpecificationBuilder builder, Expression> expression) { return ThenBy(builder, expression, condition: true); } /// /// Adds a ThenBy expression when is . /// /// The ordered builder. /// The expression. /// Whether to apply the ThenBy. /// The entity type. /// The ordered builder. public static OrderedSpecificationBuilder ThenBy(this OrderedSpecificationBuilder builder, Expression> expression, bool condition) { if (condition && !builder.IsChainDiscarded) { builder.Builder.OrderExpressions.Add(new OrderExpressionInfo(expression, OrderType.ThenBy)); } else { builder.IsChainDiscarded = true; } return builder; } /// /// Adds a ThenByDescending expression for secondary ordering. /// /// The ordered builder. /// The expression. /// The entity type. /// The ordered builder. public static OrderedSpecificationBuilder ThenByDescending(this OrderedSpecificationBuilder builder, Expression> expression) { return ThenByDescending(builder, expression, condition: true); } /// /// Adds a ThenByDescending expression when is . /// /// The ordered builder. /// The expression. /// Whether to apply the ThenByDescending. /// The entity type. /// The ordered builder. public static OrderedSpecificationBuilder ThenByDescending(this OrderedSpecificationBuilder builder, Expression> expression, bool condition) { if (condition && !builder.IsChainDiscarded) { builder.Builder.OrderExpressions.Add(new OrderExpressionInfo(expression, OrderType.ThenByDescending)); } else { builder.IsChainDiscarded = true; } return builder; } }