Выражение LINQ возвращает ноль

2

У меня есть следующий запрос в LINQ. "Символ" не существует, и запрос равен NULL, но я получил ошибку, кастинг и сбой программы.

decimal x = from cie in m_entities.Cie
            where cie.symbol.Equals(Symbol)
            select cie.cie_id;

Или я могу иметь нуль в x?

  • 3
    Какое точное сообщение об исключении вы получаете?
  • 1
    Предполагая, что m_entities.Cie является IQueryable или IEnumerable, как эта программа компилируется для создания исключения во время выполнения, поскольку результатом запроса должен быть IEnumerable, а не десятичное число?
Теги:
linq
entity-framework

2 ответа

5
Лучший ответ

Я не думаю, что x когда-либо будет нулевым - вы просто получите пустой IQueryable<T> (или это IEnumrable<T>?), где T - тип данных cie_id.

Ошибка кастинга заключается в том, что вы пытаетесь передать коллекцию в decimal.

  • 0
    Я не вижу актерский состав в коде ...
  • 0
    ... так что вы можете обернуть запрос в (...) и затем вызвать .FirstOrDefault() чтобы вернуть одиночный результат или 0 .
Показать ещё 3 комментария
1

Предполагая, что cie_id является десятичной, попробуйте следующее:

decimal x = (from cie in m_entities.Cie
                     where cie.symbol.Equals(Symbol)
                     select cie.cie_id).FirstOrDefault()

Ваш текущий код пытается назначить IEnumerable <decimal> до десятичной, что не сработает. FirstOrDefault выберет первое совпадение, если оно есть, в противном случае 0.

Если вы знаете, что будет 1 или 0 совпадений, вы можете рассмотреть SingleOrDefault вместо FirstOrDefault.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню