LINQ CompiledQuery. Компилировать и динамически сортировать? - PullRequest
0 голосов
/ 16 июня 2009

Это очень короткий вопрос, и я боюсь, что ответ тоже короткий.

Есть ли способ сделать что-нибудь по линии

Func<DataContext, string, bool, IEnumerable<X> fnMyQuery = CompiledQuery.Compile<DataContext, string, bool IList<X>(
     (db, sortColumn, sortDesc) => (
          (!sortDesc)?
              db.OrderBy(x => DynamicResolve(sortColumn))
          :
              db.OrderByDescending(x => DynamicReolve(sortColumn))
      ));

Говоря по-другому, я хотел бы создать скомпилированный запрос, который может принимать столбец и порядок сортировки, а затем сортировать результаты таким желаемым способом - я могу решить, как это сделать, не имея запроса скомпилировано - но возможно ли это с помощью скомпилированного запроса с использованием LINQ to SQL?

Ответы [ 2 ]

1 голос
/ 03 мая 2011

Единственный способ решить эту проблему - это компилировать два запроса. По одному для каждого порядка сортировки, а затем оборачивая его помощником, который делегирует правильный скомпилированный запрос.

0 голосов
/ 17 июня 2009

Цель CompiledQuery.Compile - создать полностью переведенный и готовый к работе метод, который оценивает запрос.

полностью переведено.

Конечно, ничто не мешает вам выполнять сортировку вне базы данных (источником может быть скомпилированный запрос).

public IList<T> SortedResults<T>(IEnumerable<T> source,
  string sortColumn, bool sortDesc)
{
  List<T> results = source.ToList();
  if (!sortDesc)
  {
    results = Enumerable
      .OrderBy(results, x => DynamicResolve(sortColumn))
      .ToList();
  }
  else
  {
    results = Enumerable
      .OrderByDescending(results, x => DynamicResolve(sortColumn))
      .ToList();
  }
  return results;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...