Giter Club home page Giter Club logo

Comments (6)

fiseni avatar fiseni commented on July 27, 2024 1

Ok, let's do that way. If there is more than one chain, the evaluator will throw an exception. I'll make the changes the following days.

from specification.

fiseni avatar fiseni commented on July 27, 2024

This is addressed with PR #30. The usage will be as following, we can chain several levels.

    public class StoresByCompanyOrderedDescByNameThenByIdSpec : Specification<Store>
    {
        public StoresByCompanyOrderedDescByNameThenByIdSpec(int companyId)
        {
            Query.Where(x => x.CompanyId == companyId)
                 .OrderByDescending(x => x.Name)
                      .ThenBy(x => x.Id)
                      .ThenByDescending(x => x.Title)
        }
    }

Notice:
If we create several Order chains, they all will be saved in the internal state of the specification, but the evaluator will parse only the last chain. I don't know if it makes sense to create several chains! Anyhow based on the decision, would be easy to change the behaviour in SpecificationEvaluator, and parse all of them.

from specification.

fiseni avatar fiseni commented on July 27, 2024

If no one has comments here we can close the issue.
@ardalis are you OK with it, should we keep it this way? Only one Order chain will be evaluated.

from specification.

ardalis avatar ardalis commented on July 27, 2024

Let's close it. We should only allow one chain. Adding another should probably throw a helpful exception.

from specification.

fiseni avatar fiseni commented on July 27, 2024

Sure, we can throw an exception in the evaluator. But, are we sure we want to introduce termination behavior in this package?
We may just leave it with usage notice, or we may write analyzer to catch the ambiguous usages. Or, let's just evaluate all the chains and rely on the default behavior of the ORM (EF Core in this case).

Not sure what's the smartest thing to do.

from specification.

ardalis avatar ardalis commented on July 27, 2024

Let's if nothing else demonstrate the current behavior in some integration tests so that we can look at it and figure out from concrete code examples how we would expect it to behave. What I don't want is for someone to think they have configured it to work a certain way, but transparently we are ignoring a bunch of what they did and only taking the most recent chain. I'd rather the design that only one chain is supported be enforced than documented, since it's much more likely to be missed in docs (and the bug introduced might be a subtle one).

from specification.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.