SKhan.Specification 0.1.3

dotnet add package SKhan.Specification --version 0.1.3
                    
NuGet\Install-Package SKhan.Specification -Version 0.1.3
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SKhan.Specification" Version="0.1.3" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="SKhan.Specification" Version="0.1.3" />
                    
Directory.Packages.props
<PackageReference Include="SKhan.Specification" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add SKhan.Specification --version 0.1.3
                    
#r "nuget: SKhan.Specification, 0.1.3"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#addin nuget:?package=SKhan.Specification&version=0.1.3
                    
Install as a Cake Addin
#tool nuget:?package=SKhan.Specification&version=0.1.3
                    
Install as a Cake Tool

Implementation of Specification DDD pattern

Usage: Create your own Specification

public sealed class UserSpecification(string name) : CompositeSpecification<User>
{
    public override Expression<Func<User, bool>> IsSatisfiedByExpression() => user => user.Name == name;
}

//User class as reference
public class User
{
    public string Name { get; set; }
}

Then in your code use this specification

public class Examples
{
    //Filters a collection
    public IReadonlyCollection<User> Filter(string nameToSearch)
    {
        var usersBySearch = users.Where(new UserSpecification(nameToSearch).IsSatisfiedBy).ToList();

        //some your code
        return usersBySearch;
    }

    //Defines if the user is satisfy the expression
    public bool IsUserNameSergei(User user)
    {
        //some your code
        return new UserSpecification("Sergei").IsSatisfiedBy(user);
    }
}

To Use negative Specification use

public class Examples
{
    //Filters a collection
    public IReadonlyCollection<User> Filter(string nameNotToSearch)
    {
        var usersBySearch = users.Where(new UserSpecification(nameNotToSearch).Not().IsSatisfiedBy).ToList();

        //some your code
        return usersBySearch;
    }

    //Defines if the user is satisfy the expression
    public bool IsUserNameNotSergei(User user)
    {
        //some your code
        return new UserSpecification("Sergei").Not().IsSatisfiedBy(user);
    }
}

Or to use Several Specifications

public class Examples
{
    //Filters a collection
    public IReadonlyCollection<User> Filter(string nameNotToSearch)
    {
        var defaultName = "Frodo";

        //This should return all users with names nameNotToSearch and Frodo
        var usersBySearch = users.Where(new UserSpecification(nameNotToSearch).Or(new UserSpecification(defaultName)).IsSatisfiedBy).ToList();

        //some your code
        return usersBySearch;
    }
}
Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net8.0

    • No dependencies.
  • net9.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.3 43 6/27/2025
0.1.2 45 6/27/2025
0.1.1 47 6/27/2025
0.1.0 86 6/26/2025

Update project descriptions