NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
NuGet · #2102 most downloaded on NuGet
EF Core plugin package to Ardalis.Specification containing EF Core evaluator and abstract repository.
Last release 1 years ago
24 Aug 2025
Release timing varies
gaps range from 4 weeks to 1.3 years
Some releases are documented
notes for 10 of 17 stable releases
1 version withdrawn
withdrawn after publishing
127 years old
20 releases · first in 1900
The change log and breaking changes are listed here. https://github.com/ardalis/Specification/issues/427
The change log and breaking changes are listed here. https://github.com/ardalis/Specification/issues/427
Full Changelog: v9.3.0...v9.3.1
Reactions are currently unavailable
One column per quarter.
The change log and breaking changes are listed here. https://github.com/ardalis/Specification/issues/427
The change log and breaking changes are listed here. https://github.com/ardalis/Specification/issues/427
Full Changelog: v9.2.0...v9.3.0
Use OneOrMany for all internal collections #506
Avoid List allocation for PostProcessingAction. #501
Update dependencies. #526
Rename TagWithEvaluator to QueryTagEvaluator #515
Redefine WithProjectionOf as an extension to Specification instead of ISpecification #516
The change log and breaking changes are listed here. https://github.com/ardalis/Specification/issues/427
The change log and breaking changes are listed here. https://github.com/ardalis/Specification/issues/427
The change log and breaking changes are listed here. https://github.com/ardalis/Specification/issues/427
The change log and breaking changes are listed here. https://github.com/ardalis/Specification/issues/427
Full Changelog: v9.0.1...v9.1.0
Add WithProjectionOf feature Allow combination of Specification with different projections #389
Fix type inference for ThenInclude with casting InvalidCastException when using ThenInclude on IReadOnlyCollection #463
The PreviousPropertyType is re-added to IncludeExpressionInfo . The constructors of IncludeExpressionInfo are modified.
The change log and breaking changes are listed here. https://github.com/ardalis/Specification/issues/427
The change log and breaking changes are listed here. https://github.com/ardalis/Specification/issues/427
The change log and breaking changes are listed here. https://github.com/ardalis/Specification/issues/427
The change log and breaking changes are listed here. https://github.com/ardalis/Specification/issues/427
Full Changelog: v8.0...v9.0.0
The "standard" use of the library remains fairly intact.
GetBySpec repository methods are removed.IEntity interface is removed.Select/SelectMany are applied at the end of the chain or in a separate Query clause. These extension methods return void and no further chaining is possible.In this version, we refactored the internals and the building blocks significantly. The "advanced" use cases are affected by these changes. Users who have custom extensions or have been relying on the internals need to migrate accordingly.
List<T> by default and will return Enumerable.Empty<T> if empty.Take and Skip properties no longer is null. They're updated to a non-nullable int type with a default value of -1.IInMemorySpecificationEvaluator and ISpecificationValidator parameters. The properties are still defined as virtual and can be overridden.ISpecificationBuilder<T> and ISpecificationBuilder<T, TResult> builders.OrderedSpecificationBuilder and CacheSpecificationBuilder are removed.SearchEvaluator is renamed to SearchMemoryEvaluator.IncludeEvaluator.Default and IncludeEvaluator.Cached singleton instances are removed. Instead, use the IncludeEvaluator.Instance.SpecificationEvaluator no longer accepts bool cacheEnabled parameter. The caching is applied by default wherever necessary.EntityType, PropertyType, and PreviousPropertyType are removed from IncludeExpressionInfo.Update and Delete repository methods return Task<int> (the affected rows).Update TFMs #438
Update Specification constructors as public. #413
Remove IEntity #414
Reduce the Specification size. Set the initial state to null. #415
Refactor Take/Skip state to non-nullable int. Define the default value to -1. #416
Remove the Evaluator and Validator state from Specifications. #417
Remove the state for the Query builder. Update it as a calculated property. #418
Improve the specification builders. Select/SelectMany should be applied in the end. #419
Add IsChainDiscarded thread-static field. #420
Improve the C# implementation of the Like operator. #421
Improve the Search in-memory evaluator. Implement a custom iterator and reduce allocations. #422
Refactor Search validator to allocation-free implementation. #424
Improve the Search EF evaluator. Reduce allocations. #423
Refactor Include evaluator. Implement caching. #425
Update expression constructs. Reduce size. #426
Remove obsolete API #346
Add Readme file in the NuGet package #385
Community requests:
Add TagWith feature #428
Add EF IgnoreAutoIncludes support #436
Fix EnableCache to not append a dash if you pass in no args #412
Why do the Update and Delete not returning anything? #361
The "standard" use of the library remains fairly intact.
The obsolete GetBySpec repository methods are removed.
The IEntity interface is removed.
The Select / SelectMany are applied at the end of the chain or in a separate Query clause. These extension methods return void and no further chaining is possible.
In this version, we refactored the internals and the building blocks significantly. The "advanced" use cases are affected by these changes. Users who have custom extensions or have been relying on the internals need to migrate accordingly.
The expression collections no longer are initialized to a new List<T> by default and will return Enumerable.Empty<T> if empty.
The default value for Take and Skip properties no longer is null . They're updated to non nullable int type with a default value of -1 .
The specification constructors no longer accept IInMemorySpecificationEvaluator and ISpecificationValidator parameters. The properties are still defined as virtual and can be overridden.
The builder infrastructure is refactored to accommodate better flow for specs with projections. All extensions should be written for both ISpecificationBuilder<T> and ISpecificationBuilder<T, TResult> builders.
The OrderedSpecificationBuilder and CacheSpecificationBuilder are removed.
The in-memory SearchEvaluator is renamed to SearchMemoryEvaluator .
The IncludeEvaluator.Default and IncludeEvaluator.Cached singleton instances are removed. Instead, use the IncludeEvaluator.Instance .
The SpecificationEvaluator no longer accepts bool cacheEnabled parameter. The caching is applied by default wherever necessary.
The EntityType , PropertyType , and PreviousPropertyType are removed from IncludeExpressionInfo .
The Update and Delete repository methods return Task<int> (the affected rows).
Added TFMs net6.0, net7.0 and net8.0
Patch 2 by @davidhenley in https://github.com/ardalis/Specification/pull/283
Just the Docs link in docs home page by @snowfrogdev in https://github.com/ardalis/Specification/pull/293Added dictionary as arbitrary state for specifications. PR 248
AddRangeAsync. PR 239
- Added dictionary as arbitrary state for specifications. PR 248
- Added support for updating specifications. PR 251
- Updated base specifications as non-abstract classes. PR 252
- Update the infrastructure for single result specifications. PR 272
- Added UpdateRangeAsync. PR 272
- Add WithSpecification overload for specifications with Select. PR 273See README.md
See README.md
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →