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

    +109

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    private IEnumerable<CharacteristicValue> GetCharacteristicValues(IQueryable<CharacteristicValue> allCharacteristicValues, int characteristicId)
    {
          var characteristicValues = new CharacteristicValue[userIds.Length];
    
           for (var i = 0; i < userIds.Length; i++)
           {
               characteristicValues[i] = allCharacteristicValues.FirstOrDefault(cv => cv.UserId == userIds[i] && cv.CharacteristicId == characteristicId); // Todo: Try to replace with a single query.
           }
    
           return characteristicValues;
    }

    Драсьте, нашёл в коде такую вот какашку. Как видите параметр allCharacteristicsValues реализует интерфейс IQuarable из EF. То бишь каждый раз, когда будет вызываться метод FirstOrDefault будет делаться запрос к базе. В идеале это должно было бы выглядеть так:

    var characteristicValues = allCharacteristicValues.Where(cv => cv.CharacteristicId == characteristicId && userIds.Contains(cv.UserId));

    Но при такой реализации размер масива пользователей и значение может разниться:

    Values:
    val1
    val2
    val3

    Users:
    1
    2
    3
    4
    5

    Для первого же варианта результат будет выглядеть так:
    Values:
    val1
    val2
    val3
    null
    null

    Users:
    1
    2
    3
    4
    5


    Собственно всё )))) Надеюсь подсоветуете чего-нибудь хорошего ;)

    Запостил: walash, 20 Марта 2012

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

    • Такими темпами на говнокодике появится GovnoPalach
      Ответить
    • показать все, что скрытоРаздел C# на ГК - худшее место в Рунете искать помощи, дельного совета по C#. 24 из 25 посетителей не знают C# вообще, зато вони то!
      Ответить
      • Нужно начать с того, что ГК - вообще не то место, куда нужно обращаться за помощью. Вот Stackoverflow - правильное место.
        Ответить
        • совершенно точно.
          Ответить
        • похоже, пора вешать нагскрин с этим комментом и галочкой "я понял"
          Ответить
        • 1 из 25 и на стековерфловочке испытывает баттхёрт, кстати :-)

          и не надо туда ракоту заманивать, и так средний уровень упал до печатающей обезьяны
          Ответить
        • >Вот Stackoverflow - правильное место.
          Неправильное. Для таких вопросов больше подойдут
          ответы Мейл.ру и виошечка гугля. Тем более они на русском.
          Ответить
      • тем не менее, если тебе нужны нули, то попробуй сделать LINQ join
        http://stackoverflow.com/questions/525194/linq-inner-join-vs-left-join
        Ответить
      • > 24 из 25 посетителей не знают C# вообще
        Да чего так скромно-то? Говори четко, по делу и в лицо: все тут пидарасы, а ты один - д'Артаньян.
        Ответить
        • я не один, но я хотя бы шарп знаю. ни кресты ни пэху не знаю на столько чтобы, туда не хожу, гавном никого не обливаю, заметь
          Ответить
          • >24 из 25 посетителей
            >я не один
            Тут сидит не более 25 завсегдатаев (я и 20 насчитать не могу). Остальные - залетные. Согласно твоему утверждению только один человек на гкоде знает шарп.
            Получили противоречие. Q.E.D.
            Ответить
    • На говнокоде как-то подушевнее и человечнее, чем на стэке ))). Тут не жуют сопли, а сразу рубят правду матку :)

      Спасибо за снипет ;) К сожалению, мне не помог :)
      Ответить
      • а почему не помог?
        Ответить
        • У меня там чуть посложнее дата модель, чем я привёл в примере. Как всегда реальность накладывает свой отпечаток на большинство проектных решений (
          Ответить
    • показать все, что скрытоvanished
      Ответить

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