Dynamic Sorting (OrderBy)

Dynamically create an OrderBy clause for sorting by a property name.

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 }
        };

        string sortBy = "Age";

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

        var lambda = Expression.Lambda(property, parameter);

        var sortedList = people.AsQueryable()
                               .OrderBy((dynamic)lambda)
                               .ToList();

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