using System.Collections.Generic;
using System.Linq.Expressions;
public string Name {get; set;}
public static void Main()
var itemType = typeof(Item);
var propName = nameof(Item.Name);
var items = new List<Item>{ new Item{Name="Name1"}, new Item{Name="Name2"} };
var paramExpr = Expression.Parameter(itemType);
var propCoalesceExpr = Expression.Coalesce(Expression.Property(paramExpr, propName), Expression.Property(paramExpr, propName));
var propAccessExpr = Expression.Lambda(propCoalesceExpr, paramExpr);
var callExpr = Expression.Call(
typeof(Enumerable), "OrderBy", new[] { itemType, propAccessExpr.ReturnType }, Expression.Constant(items), propAccessExpr);
Console.WriteLine(callExpr);