< Summary

Information
Class: Pozitron.QuerySpecification.SpecificationEvaluator
Assembly: Pozitron.QuerySpecification.EntityFrameworkCore
File(s): /home/runner/work/QuerySpecification/QuerySpecification/src/QuerySpecification.EntityFrameworkCore/Evaluators/SpecificationEvaluator.cs
Tag: 44_11195777782
Line coverage
100%
Covered lines: 34
Uncovered lines: 0
Coverable lines: 34
Total lines: 65
Line coverage: 100%
Branch coverage
100%
Covered branches: 16
Total branches: 16
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.cctor()100%11100%
get_Evaluators()100%11100%
.ctor()100%11100%
.ctor(...)100%11100%
Evaluate(...)100%1212100%
Evaluate(...)100%44100%

File(s)

/home/runner/work/QuerySpecification/QuerySpecification/src/QuerySpecification.EntityFrameworkCore/Evaluators/SpecificationEvaluator.cs

#LineLine coverage
 1namespace Pozitron.QuerySpecification;
 2
 3public class SpecificationEvaluator
 4{
 15    public static SpecificationEvaluator Default = new();
 6
 537    protected List<IEvaluator> Evaluators { get; }
 8
 69    public SpecificationEvaluator()
 10    {
 611        Evaluators =
 612        [
 613            WhereEvaluator.Instance,
 614            LikeEvaluator.Instance,
 615            IncludeEvaluator.Instance,
 616            OrderEvaluator.Instance,
 617            AsNoTrackingEvaluator.Instance,
 618            AsNoTrackingWithIdentityResolutionEvaluator.Instance,
 619            IgnoreQueryFiltersEvaluator.Instance,
 620            AsSplitQueryEvaluator.Instance
 621        ];
 622    }
 23
 124    public SpecificationEvaluator(IEnumerable<IEvaluator> evaluators)
 25    {
 126        Evaluators = evaluators.ToList();
 127    }
 28
 29    public virtual IQueryable<TResult> Evaluate<T, TResult>(
 30        IQueryable<T> source,
 31        Specification<T, TResult> specification,
 32        bool ignorePaging = false) where T : class
 33    {
 2434        ArgumentNullException.ThrowIfNull(specification);
 2435        if (specification.Selector is null && specification.SelectorMany is null) throw new SelectorNotFoundException();
 2336        if (specification.Selector is not null && specification.SelectorMany is not null) throw new ConcurrentSelectorsE
 37
 2138        source = Evaluate(source, (Specification<T>)specification, true);
 39
 2140        var resultQuery = specification.Selector is not null
 2141          ? source.Select(specification.Selector)
 2142          : source.SelectMany(specification.SelectorMany!);
 43
 2144        return ignorePaging
 2145            ? resultQuery
 2146            : resultQuery.ApplyPaging(specification);
 47    }
 48
 49    public virtual IQueryable<T> Evaluate<T>(
 50        IQueryable<T> source,
 51        Specification<T> specification,
 52        bool ignorePaging = false) where T : class
 53    {
 5054        ArgumentNullException.ThrowIfNull(specification);
 55
 87856        foreach (var evaluator in Evaluators)
 57        {
 39058            source = evaluator.Evaluate(source, specification);
 59        }
 60
 4961        return ignorePaging
 4962            ? source
 4963            : source.ApplyPaging(specification);
 64    }
 65}