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

    −1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    mId = core.Material.Materials.FirstOrDefault(x => x.Value.article == m.article && x.Value.title == m.title && x.Value.category_id == m.category_id).Key;
    if (mId == 0)
    	mId = core.Material.Materials.FirstOrDefault(x => x.Value.article == m.article && x.Value.title == m.title).Key;
    if (mId == 0)
    	mId = core.Material.Materials.FirstOrDefault(x => x.Value.article == m.article && x.Value.category_id == m.category_id).Key;
    if (mId == 0)
    	mId = core.Material.Materials.FirstOrDefault(x => x.Value.title == m.title && x.Value.category_id == m.category_id).Key;
    if (mId == 0)
    	mId = core.Material.Materials.FirstOrDefault(x => x.Value.article == m.article).Key;
    if (mId == 0)
    	mId = core.Material.Materials.FirstOrDefault(x => x.Value.title == m.title).Key;

    Есть 3 поля.
    Поиск сначала по 3. Затем по 2, затем по 2 и еще по 2. И от безысходности по 1
    Реально ли это оптимизировать?

    Запостил: yakov_255, 29 Января 2016

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

    • В любой непонятной ситуации строй граф.
      Ответить
    • А материалс это таблица в бд или тупо енумерейбл?
      Ответить
      • Енумерейбл (в Dictionary)
        Class Material {
        public string Title {get; set;}
        ....
        }
        Ответить
        • Хотел предложить что-то типа (считаем rank для каждого элемента и выбираем лучший):
          core.Material.Materials.Max(x =>
              (x.Value.article == m.article ? 1 : 0) +
              (x.Value.title == m.title ? 1 : 0) +
              (x.Value.category_id == m.category_id ? 1 : 0));
          Но оказалось, что Max вернёт тупо циферку, а не сам элемент... По-хорошему Max должен был юзать функцию только для сравнения, а возвращать исходный элемент... Но почему-то майкрософт сделал бесполезную херню, которая только для чисел работает. А аналог через Aggregate уже не няшен.
          Ответить
          • Недавно также факапнулся. Тоже думал что Max использует функцию как критерий. Сделал ордербайдесцендинг(функция).ферстордефол т()
            Ответить
            • Ну причём текущую версию Max можно выразить тупо через Select + Max. А ту, которую надо - невозможно никак. Только руками писать новый экстеншн метод или через Aggregate костылить.

              > ордербайдесцендинг(функция).ферстордефол т()
              А оно, случаем, не отсортирует весь список ради одного элемента?
              Ответить
              • пьюр, вернет ордереденамерабл. Так весь линк работает.
                Ответить
                • > ордербайдесцендинг(функция).ферстордефолт()
                  > ордереденамерабл
                  Пипец, хоть бы цамелЦасе использовали что-ли.
                  Ответить
    • >Есть 3 поля.
      Куда сам сядешь, куда мать положишь?
      Ответить

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