// 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;
}
}