Linq Specification

For Linq scenarios, use ILinqSpecification<T> interface from FluentSpecification.Abstractions package.
ILinqSpecification<T> inherit from ISpecification<T>.

public class ExpiredCreditCardSpecification :
    ILinqSpecification<CreditCard>
{
    public Expression<Func<CreditCard, bool>> GetExpression()
    {
        DateTime now = DateTime.Now;
        return creditCard => creditCard.ValidityDate < now;
    }

    Expression ILinqSpecification.GetExpression()
    {
        return GetExpression();
    }

    public bool IsSatisfiedBy(CreditCard candidate)
    {
        return GetExpression().Compile().Invoke(candidate);
    }
}

You don't need to use Expression in IsSatisfiedBy method, but it's highly recommended to provide the same result here and here.

GitHub