Создать выражение OrderBy для LINQ / Lambda

Я создаю доказательство концепции, использующей Lambda / LINQ для динамического выбора where и orderby. Следующий код работает с выражением where, но я не могу понять, как создать порядок по выражению. Для этого примера, если возможно, я хотел бы сделать его простым; Я бы предпочел не писать код, изменяющий дерево выражений.

void Main()
{
    DateTime productSince = DateTime.UtcNow.Subtract(new TimeSpan(1,30,0));
    Expression<Func<Products, bool>> filter = d => d.CreatedDate > productSince && d.Price < 100 ;    
    List<Products> products = GetProducts(filter, Products);
    Console.WriteLine(products);
}

private static List<Products> GetProducts(Expression<Func<Products, bool>> filter,  Table<Products> Products)
{

    var products = Products.Where(filter);
    return products.ToList();
}

То, что я хочу, похоже на следующее, но не могу понять код для создания порядка по выражению.

void Main()
{
    DateTime productSince = DateTime.UtcNow.Subtract(new TimeSpan(1,30,0));
    Expression<Func<Products, bool>> filter = d => d.CreatedDate > productSince && d.Price < 100 ;
    Expression<Func<Products, ????>> orderBy = d => ??????;

    List<Products> products = GetProducts(filter, orderBy, Products);
    Console.WriteLine(products);
}

private static List<Products> GetProducts(Expression<Func<Products, bool>> filter,
               Expression<Func<Products, ???>> orderBy, Table<Products> Products)
{

    var products = Products.Where(filter).OrderBy(orderBy);
    return products.ToList();
}

Если вам интересно, я использую LinqPad для этого доказательства концепции.

15
задан Cœur 24 January 2017 в 16:56
поделиться