1. C# / Говнокод #19867

    +4

    1. 1
    2. 2
    IEnumerable<SmartCurrencyPriceRule> rules = _smartRuleService.GetCurrencyPriceRules(id).OrderBy(r => r.Title).ThenBy(r => r.Updated).ThenBy(r => r.Created);
    var oldPriceRule = rules.SingleOrDefault(r => r.RuleId == postData.RuleId) ?? new SmartCurrencyPriceRule();

    Давайте три раза отсортируем, а то мало ли что, а потом возьмём тот, у которого id совпадает.
    Вот что значит - любит человек порядок.

    Запостил: kerman, 23 Апреля 2016

    Комментарии (14) RSS

    • Строго говоря, это разворачивается в одну сортировку, но всё равно...
      Ответить
    • Ну, может быть, там id не уникальное?
      Ответить
      • О_о
        это же айдишник. Если он не уникальный, тогда он не айдишник... Впрочем, ещё путает наименование, обычно ShitId означает ссылку на айди.
        Ответить
        • > Если он не уникальный, тогда он не айдишник
          Не факт. Если в базе констрейнта на уникальность нету - я бы не был так уверен...

          Ну и RuleId может быть просто ссылкой на primary key другой таблицы (в которой он таки уникален).
          Ответить
          • > Не факт. Если в базе констрейнта на уникальность нету - я бы не был так уверен...
            да при чём тут констрейнт? В уникальности глубинный смысл айдишника - по нему можно объект однозначно идентифицировать!

            >> путает наименование, обычно ShitId означает ссылку на айди
            > Ну и RuleId может быть просто ссылкой на primary key другой таблицы (в которой он таки уникален)
            Например CurrencyPriceRules... oh shi...
            Ответить
        • Есть вариант что в таблице многие ко многим, и id там составной из 2 id других таблиц.

          Эх. хоть как то пытаюсь оправдать...
          Ответить
          • Да если уж даже получится придумать случай, когда с таким RuleId может быть несколько, остаётся восхищаться глубинному смыслу выбора первого объекта в алфавитном порядке с наименьшей датой изменения и наименьшей датой создания. Зачем?

            Because I can, that's why.
            Ответить
            • Because I can LINQ ASS PARELLEL!!!
              Ответить
              • Точно. Я вот сейчас подумал, что можно было бы этот кусок ускорить за счёт Parallel LINQ.
                Ответить
            • > наименьшей датой изменения и наименьшей датой создания
              > oldPriceRule
              Что-то в этом есть...
              Ответить
              • Так в приоритете же сортировка по алфавиту.
                Ответить
                • Я щас подумал, что чувак, вероятно, хотел создать коллекцию, для дальнейшего использования, что бы она сразу была в удобном виде.

                  Только вот он не учел, что линк выполняется во время обращения к переменной запроса для получения самых актуальных данных
                  Ответить
      • >>> rules.SingleOrDefault(r => r.RuleId == postData.RuleId)
        к слову, если таких (в rules которые r.RuleId == postData.RuleId) больше одного, то эта конструкция начнет ругаться эксепшенами. Поэтому сортировка не имеет никакого смысла. Что бы пофиксить это используют FirstOrDefault.
        Ответить
        • Да, действительно. Впрочем, расследование показало, что данный ГК мог образоваться вследствии инлайна метода получения списка (с сортировкой) в метод, берущий единственное правило.
          Ответить

    Добавить комментарий