Построение лямбда-выражения OrderBy на основе свойства дочерней сущности

Я пытаюсь сгенерировать предложение LINQ OrderBy, используя лямбда-выражения с вводом имени столбца объекта в виде строки (в переменной sortOn ниже ).

Приведенный ниже код отлично работает для значения sortOn, такого как «Код», генерирующего лямбду

p => p.Code

. Но я также хотел бы отсортировать дочерний объект, где лямбда может быть

p => p.Category.Description

Итак, в этом случае я просто хотел бы установить sortOn = "Category.Description" и сгенерировать правильное лямбда-выражение.

Это возможно? Любые предложения о том, как лучше всего это сделать, будут приветствоваться.

Этот код отлично работает для простого случая:

var param = Expression.Parameter(typeof (Product), "p");

var sortExpression = Expression.Lambda<Func<Product, object>>(
    Expression.Property(param, sortOn), param);

if (sortAscending ?? true)
{
   products = products.OrderBy(sortExpression);
}
else
{
   products = products.OrderByDescending(sortExpression);
}

Вариант использования -для решения этой проблемы заключается в отображении сетки данных и возможности сортировки данных путем простой передачи имени столбца, подлежащего сортировке, обратно на сервер. Я хотел бы сделать решение общим,но пока начали использовать определенный тип (Product в примере ).

11
задан casperOne 13 July 2012 в 17:06
поделиться