< Summary

Information
Class: Pozitron.QuerySpecification.OrderEvaluator
Assembly: Pozitron.QuerySpecification
File(s): /home/runner/work/QuerySpecification/QuerySpecification/src/QuerySpecification/Evaluators/OrderEvaluator.cs
Tag: 67_15587897385
Line coverage
100%
Covered lines: 31
Uncovered lines: 0
Coverable lines: 31
Total lines: 87
Line coverage: 100%
Branch coverage
100%
Covered branches: 32
Total branches: 32
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.cctor()100%11100%
.ctor()100%11100%
Evaluate(...)100%1616100%
Evaluate(...)100%1616100%

File(s)

/home/runner/work/QuerySpecification/QuerySpecification/src/QuerySpecification/Evaluators/OrderEvaluator.cs

#LineLine coverage
 1namespace Pozitron.QuerySpecification;
 2
 3/// <summary>
 4/// Represents an evaluator for order expressions.
 5/// </summary>
 6[EvaluatorDiscovery(Order = 50)]
 7public sealed class OrderEvaluator : IEvaluator, IMemoryEvaluator
 8{
 9    /// <summary>
 10    /// Gets the singleton instance of the <see cref="OrderEvaluator"/> class.
 11    /// </summary>
 312    public static OrderEvaluator Instance = new();
 613    private OrderEvaluator() { }
 14
 15    /// <inheritdoc/>
 16    public IQueryable<T> Evaluate<T>(IQueryable<T> source, Specification<T> specification) where T : class
 17    {
 6018        IOrderedQueryable<T>? orderedQuery = null;
 19
 66020        foreach (var item in specification.Items)
 21        {
 27022            if (item.Type == ItemType.Order && item.Reference is Expression<Func<T, object?>> expr)
 23            {
 4024                if (item.Bag == (int)OrderType.OrderBy)
 25                {
 2226                    orderedQuery = source.OrderBy(expr);
 27                }
 1828                else if (item.Bag == (int)OrderType.OrderByDescending)
 29                {
 430                    orderedQuery = source.OrderByDescending(expr);
 31                }
 1432                else if (item.Bag == (int)OrderType.ThenBy)
 33                {
 434                    orderedQuery = orderedQuery!.ThenBy(expr);
 35                }
 1036                else if (item.Bag == (int)OrderType.ThenByDescending)
 37                {
 1038                    orderedQuery = orderedQuery!.ThenByDescending(expr);
 39                }
 40            }
 41        }
 42
 6043        if (orderedQuery is not null)
 44        {
 2545            source = orderedQuery;
 46        }
 47
 6048        return source;
 49    }
 50
 51    /// <inheritdoc/>
 52    public IEnumerable<T> Evaluate<T>(IEnumerable<T> source, Specification<T> specification)
 53    {
 1954        var compiledItems = specification.GetCompiledItems();
 1955        IOrderedEnumerable<T>? orderedQuery = null;
 56
 10657        foreach (var item in compiledItems)
 58        {
 3459            if (item.Type == ItemType.Order && item.Reference is Func<T, object?> compiledExpr)
 60            {
 2261                if (item.Bag == (int)OrderType.OrderBy)
 62                {
 1563                    orderedQuery = source.OrderBy(compiledExpr);
 64                }
 765                else if (item.Bag == (int)OrderType.OrderByDescending)
 66                {
 367                    orderedQuery = source.OrderByDescending(compiledExpr);
 68                }
 469                else if (item.Bag == (int)OrderType.ThenBy)
 70                {
 271                    orderedQuery = orderedQuery!.ThenBy(compiledExpr);
 72                }
 273                else if (item.Bag == (int)OrderType.ThenByDescending)
 74                {
 275                    orderedQuery = orderedQuery!.ThenByDescending(compiledExpr);
 76                }
 77            }
 78        }
 79
 1980        if (orderedQuery is not null)
 81        {
 1882            source = orderedQuery;
 83        }
 84
 1985        return source;
 86    }
 87}