Dynamic Query with Multiple Conditions

This example dynamically creates a query with AND or OR conditions based on user input.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main()
    {
        var people = new List<Person>
        {
            new Person { Name = "Alice", Age = 25 },
            new Person { Name = "Bob", Age = 30 },
            new Person { Name = "Charlie", Age = 35 }
        };

        var parameter = Expression.Parameter(typeof(Person), "x");

        // Dynamic conditions
        var ageProperty = Expression.Property(parameter, "Age");
        var constant1 = Expression.Constant(30);
        var greaterThan = Expression.GreaterThan(ageProperty, constant1);

        var nameProperty = Expression.Property(parameter, "Name");
        var constant2 = Expression.Constant("Charlie");
        var equal = Expression.Equal(nameProperty, constant2);

        // Combine with OR: (x.Age > 30) || (x.Name == "Charlie")
        var orExpression = Expression.OrElse(greaterThan, equal);

        var lambda = Expression.Lambda<Func<Person, bool>>(orExpression, parameter);

        var result = people.AsQueryable().Where(lambda).ToList();

        foreach (var person in result)
        {
            Console.WriteLine($"{person.Name}, {person.Age}");
        }
    }
}