Nano Hash - криптовалюты, майнинг, программирование

Ссылка на описание ENUM при создании selectList для управления раскрывающимся списком

У меня есть класс модели представления формы, который заполняет списки выбора для использования моими представлениями. Ниже приведена выдержка из раздела, который создает SelectList. Проблема в том, что это таблица поиска, содержащая 2 других ключа

        var waterIndicatorValues = waterIndicator
            .OrderBy(u => u.WaterIndicatorDescription)
            .Select(u => new KeyValuePair<int, string>(u.WaterIndicatorId, u.WaterIndicatorDescription + " [" + u.UnitTypeId.ToString() + "] " + u.HazardTypeId.ToString()));
        this.WaterIndicatorList = new SelectList(waterIndicatorValues, "Key", "Value", water.WaterIndicatorId);

Вместо UnitTypeId и HazardTypeId мне нужны текстовые описания, связанные с этими идентификаторами. Итак, я бы хотел, чтобы мой код выглядел так:

        var waterIndicatorValues = waterIndicator
            .OrderBy(u => u.WaterIndicatorDescription)
            .Select(u => new KeyValuePair<int, string>(u.WaterIndicatorId, u.WaterIndicatorDescription + " [" + u.UnitTypeId.ToDescription() + "] " + u.HazardTypeId.ToDescription()));
        this.WaterIndicatorList = new SelectList(waterIndicatorValues, "Key", "Value", water.WaterIndicatorId);

Этот код возвращает ошибку «Метод System.String ToDescription (System.Enum)» не поддерживает преобразование в SQL».

Любые комментарии/помощь с благодарностью

ENUM для UnitTypeId:

using System.ComponentModel;

namespace Emas.Model.Enumerations
{
    /// <summary>
    /// Defines the Unit Types.
    /// </summary>
    public enum UnitType
    {
        [Description("- Please Select -")]
        Blank = 0,

        [Description("kWh")]
        kWh = 1,

        [Description("m3")]
        m3 = 2,

        [Description("litres")]
        litres = 3,

        [Description("Kg")]
        Kg = 4,

        [Description("Unit(s)")]
        Unit = 5,

    }
}
27.07.2011

Ответы:


1

Вы не можете использовать методы расширения в LINQ, которые извлекают данные из базы данных, поскольку этот код расширения нельзя преобразовать в SQL. Однако вы можете использовать ToArray() или ToList() для запуска обращения к базе данных, а затем вместо этого использовать методы расширения для результата в памяти.

Обновлять:

Основываясь на том, чего вы пытаетесь достичь в своем обновленном коде, я думаю, эта статья может содержать нужный вам ответ. Конечно, вам также нужно будет привести к типу перечисления.

Обновление 2:

Преобразование в память с помощью ToList() перед выполнением выбора с расширениями должно работать нормально, как показано ниже:

    var waterIndicatorValues = waterIndicator
        .OrderBy(u => u.WaterIndicatorDescription)
        .ToList()
        .Select(u => new KeyValuePair<int, string>(u.WaterIndicatorId, u.WaterIndicatorDescription + " [" + u.UnitTypeId.ToDescription() + "] " + u.HazardTypeId.ToDescription()));
    this.WaterIndicatorList = new SelectList(waterIndicatorValues, "Key", "Value", water.WaterIndicatorId);
27.07.2011
  • Привет, Крис, что-то вроде .Select(u =› new KeyValuePair‹int, string›(u.WaterIndicatorId, u.WaterIndicatorDescription)).ToList().Select(‹что-то здесь›); - не могли бы вы подсказать, пожалуйста, большое спасибо 27.07.2011
  • Если вы можете предоставить код для вызовов перечисления и базы данных, это может помочь поместить его в контекст, чтобы я мог лучше понять, где вы ошибаетесь. 27.07.2011
  • Таблица waterIndicator представляет собой справочную таблицу, содержащую ключ и описание, а также еще 2 числовых ключа, которые ссылаются на ENUMS. Я пытаюсь выбрать ключ и описание в качестве пары значений, но я хочу объединить описания из ENUM в список выбора для раскрывающегося списка. Надеюсь, это имеет смысл :-) ПРИВЕТСТВИЯ 27.07.2011
  • Думаю, я могу зациклить waterIndicator и обновить в памяти, но не очень аккуратно. Я думаю, что это возможно сделать в одном выражении 27.07.2011
  • См. мою обновленную ссылку выше, чтобы узнать, как это сделать. Надеюсь, это работает нормально для вас. 27.07.2011
  • Спасибо, Крис, но у меня уже есть этот код. Я использую toDescription() во всем приложении, чтобы получить описания ENUM. Я просто пытаюсь аккуратно добавить описания в память без вызова LINQ 27.07.2011
  • Обновлено, чтобы показать описание кода, выполняющего ToDescription() в памяти после вызова ToList(). 27.07.2011
  • ПОНЯЛ, это просто (я использовал .AsEnumerable() в выражении: var wasteIndicatorValues ​​= wasteIndicator .OrderBy(u => u.WasteIndicatorDescription).AsEnumerable() .Select(u => new KeyValuePair‹int, string›(u. WasteIndicatorId, u.WasteIndicatorDescription.ToString() + ( + u.UnitTypeId.ToDescription() + ) + u.HazardTypeId.ToDescription())); 27.07.2011
  • Мой способ выше тоже должен работать. Пожалуйста, проголосуйте и примите ответ, если считаете, что он помог. 27.07.2011
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..