Adds Verify support for Expression Trees using ReadableExpressions.
See Milestones for release notes.
Entity Framework Extensions is a major sponsor and is proud to contribute to the development this project.
[ModuleInitializer]
public static void Init() =>
VerifyReadableExpressions.Initialize();Given a complex Expression:
// Complex calculation with conditional logic
// Equivalent to: p => p.Age < 30
// ? p.Salary * 1.15m
// : (p.Age < 50
// ? p.Salary * 1.08m
// : p.Salary * 1.03m)
public static Expression<Func<Person, decimal>> SalaryCalculation()
{
var param = Expression.Parameter(typeof(Person));
var ageProperty = Expression.Property(param, nameof(Person.Age));
var salaryProperty = Expression.Property(param, nameof(Person.Salary));
// Nested conditional: age-based salary multipliers
var youngBonus = Expression.Multiply(
salaryProperty,
Expression.Constant(1.15m));
var midBonus = Expression.Multiply(
salaryProperty,
Expression.Constant(1.08m));
var seniorBonus = Expression.Multiply(
salaryProperty,
Expression.Constant(1.03m));
var ageLessThan30 = Expression.LessThan(
ageProperty,
Expression.Constant(30));
var ageLessThan50 = Expression.LessThan(
ageProperty,
Expression.Constant(50));
var innerConditional = Expression.Condition(
ageLessThan50,
midBonus,
seniorBonus);
var outerConditional = Expression.Condition(
ageLessThan30,
youngBonus,
innerConditional);
return Expression.Lambda<Func<Person, decimal>>(outerConditional, param);
}[Fact]
public Task VerifySalaryCalculation()
{
var expression = ComplexExpressionTrees.SalaryCalculation();
return Verify(expression);
}person => (person.Age < 30)
? person.Salary * 1.15m
: (person.Age < 50) ? person.Salary * 1.08m : person.Salary * 1.03mTree designed by BnB Studio from The Noun Project.
