Условное предложение ORDER BY в контексте структуры Entity Framework [duplicate]

Вы неправильно установили требуемую сборку Crystal Reports, вам нужно установить время выполнения Crystal Reports на каждом клиентском компьютере, а не версию для VS, это не сработает, просто скопировав assmblies вместе с вашим приложением.

Вы можете получить правильные инсталляторы из SAP напрямую, возможно, вам понадобится создать бесплатную учетную запись. 32Bit 64Bit

Привет,

68
задан Nathan W 23 December 2008 в 12:56
поделиться

3 ответа

В дополнение к красивому решению, данному @Jon Skeet, мне также нужны были ThenBy и ThenByDescending, поэтому я добавляю его на основе его решения:

    public static IOrderedEnumerable<TSource> ThenByWithDirection<TSource, TKey>(
         this IOrderedEnumerable<TSource> source, 
         Func<TSource, TKey> keySelector,  
         bool descending)
    {
        return descending ? 
               source.ThenByDescending(keySelector) :
               source.ThenBy(keySelector);
    }
0
ответ дан ehh 18 August 2018 в 20:05
поделиться

В отношении того, как это реализовано, это изменяет метод - от OrderBy / ThenBy до OrderByDescending / ThenByDescending. Однако вы можете применить сортировку отдельно к основному запросу ...

var qry = from .... // or just dataList.AsEnumerable()/AsQueryable()

if(sortAscending) {
    qry = qry.OrderBy(x=>x.Property);
} else {
    qry = qry.OrderByDescending(x=>x.Property);
}

Любое использование? Вы можете создать весь «порядок» динамически, но он более задействован ...

Другой трюк (в основном соответствующий LINQ-to-Objects) заключается в использовании множителя -1/1. Это действительно полезно для числовых данных, но это навязчивый способ добиться того же результата.

40
ответ дан Marc Gravell 18 August 2018 в 20:05
поделиться
  • 1
    Я как раз собирался написать эту ту же самую вещь, тогда мой VS застыл :( – Nathan W 23 December 2008 в 13:00
  • 2
    Использование множителя также не выполняется для возвращаемого значения int.MinValue. – Jon Skeet 23 December 2008 в 13:09
  • 3
    Спасибо, что исправил мою глупость. Марк :) (Это проблема с отправкой только перед обедом ...) – Jon Skeet 23 December 2008 в 13:40
  • 4
    Ну, вы даете так мало возможностей; -p – Marc Gravell♦ 24 December 2008 в 13:55
  • 5
    Это сообщение было отредактировано двумя редакторами SO.com – Johnny_D 12 May 2012 в 14:34
  • 6
    не должен ли возвращаться один из OrderByWithDirections? – Ctrl_Alt_Defeat 6 March 2013 в 12:43
  • 7
    @KOL: Я не уверен, что вы имеете в виду. Оба из них возвратятся, если вы перейдете в false для descending. – Jon Skeet 6 March 2013 в 15:11
  • 8
    почему вы используете метод orderBy вместо использования ключевого слова orderby в linq-запросе? – Joshit 13 June 2017 в 13:22
  • 9
    @Joshit, потому что мне нужно делать разные операции в двух случаях, и нет никакой пользы в использовании синтаксиса запроса LINQ здесь, просто используя метод расширения. Если вы предпочитаете синтаксис запроса: сделайте это, все будет хорошо. – Marc Gravell♦ 13 June 2017 в 13:38
  • 10
    @MarcGravell благодарю вас за ваш быстрый ответ! Я подумал, что если два светильника программирования производительности сделают это так, его стоит спросить, есть ли какие-то более глубокие причины;) – Joshit 13 June 2017 в 13:48

Как насчет упорядочения desc по желаемому свойству,

   blah = blah.OrderByDescending(x => x.Property);

И затем делать что-то вроде

  if (!descending)
  {
       blah = blah.Reverse()
  }
  else
  {
      // Already sorted desc ;)
  }

Не слишком ли медленный () обратный ()?

5
ответ дан sports 18 August 2018 в 20:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: