У меня есть следующий запрос в LINQ. "Символ" не существует, и запрос равен NULL, но я получил ошибку, кастинг и сбой программы.
decimal x = from cie in m_entities.Cie
where cie.symbol.Equals(Symbol)
select cie.cie_id;
Или я могу иметь нуль в x?
Я не думаю, что x когда-либо будет нулевым - вы просто получите пустой IQueryable<T>
(или это IEnumrable<T>
?), где T - тип данных cie_id
.
Ошибка кастинга заключается в том, что вы пытаетесь передать коллекцию в decimal
.
(...)
и затем вызвать .FirstOrDefault()
чтобы вернуть одиночный результат или 0
.
Предполагая, что 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.
m_entities.Cie
является IQueryable или IEnumerable, как эта программа компилируется для создания исключения во время выполнения, поскольку результатом запроса должен быть IEnumerable, а не десятичное число?