Во-первых, я использую C # 4.0 и EF 4.0 с объектом POCO для доступа к базе данных. Далее я создаю некоторую сетку (например, jqGrid) для отображения данных из базы данных через ASP.NET MVC 2.0. Эта сетка может упорядочить данные, нажав на заголовок столбца. Исходный код может выглядеть следующим образом.
// This method will generate data for jqGrid request.
// jqGridRequest contain several options about how to query data like
// Take 10 result
// Skip 50 rows
// Filter by something
// Order by column name
public JsonResult GetPeopleData(jqGridRequest req)
{
// This extension method has 2 parameters that are jqGridRequest and
// Expression<Func<T, object>> for creating object to be serialized.
// In this case, T is People type.
return DataContext.People.AsJqGridResult
(
req,
x => new
{
x.ID,
Name = x.FirstName + " " + x.LastName,
x.Age
}
)
}
Все отлично работает. Вопрос в том, когда я пытаюсь упорядочить столбец «Имя» в этой сетке, jqGrid отправит запрос, который сообщает контроллеру, чтобы упорядочить данные по столбцу «Имя». Однако столбец «Имя» не существует в базе данных, поскольку он представляет собой просто объединенное значение некоторого столбца.
Самым простым для решения этого вопроса является создание кода для выполнения чего-то вроде следующего кода.
DataContext.People.OrderBy(x => x.FirstName + " " + x.LastName);
Однако мне нужно создать какой-нибудь метод для обработки любого простого условия orderby, подобного этому. После того, как я ищу и пробую любые возможности по поводу выражения. Я только что обнаружил, что могу использовать некоторые данные, содержащиеся в NewExpression, чтобы упорядочить этот запрос. Но я не знаю, как преобразовать / создать Аргумент в объекте NewExpression в Expression для использования в качестве параметра метода OrderBy.
Спасибо