C# LINQ表达式返回null

C# LINQ表达式返回null,c#,linq,entity-framework,C#,Linq,Entity Framework,我在LINQ中有以下查询。“Symbol”不存在,查询为null,但我得到了一个错误,即强制转换,程序崩溃 decimal x = from cie in m_entities.Cie where cie.symbol.Equals(Symbol) select cie.cie_id; 或者我可以在x中有一个空值吗 我认为x永远不会是空的——你只会得到一个空的IQueryable(或者是IEnumerable?),其中t是cie\u id的数据类

我在LINQ中有以下查询。“Symbol”不存在,查询为null,但我得到了一个错误,即强制转换,程序崩溃

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

或者我可以在x中有一个空值吗

我认为x永远不会是空的——你只会得到一个空的
IQueryable
(或者是
IEnumerable
?),其中t是
cie\u id
的数据类型


强制转换错误是因为您试图将集合强制转换为十进制,假设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个匹配,你可以考虑单默认而不是FrStRealStudio。< /P>你得到的异常异常消息是什么?假设<代码> MyStudio.CIE是可查询的或可枚举的,这个程序是如何编译的,以便在运行时产生异常。由于查询的结果应该是IEnumerable,而不是decimal?…因此您可以将查询包装在

(…)
中,然后调用
.FirstOrDefault()
以返回单独的结果或
0
。强制转换隐含在查询返回集合中,但
x
被声明为
decimal
。如果用
var
声明
x
,则不会出现
InvalidCastException
,但是
x
也不会是
decimal
。这难道不应该在编译时产生“无法隐式地将类型'IEnumerable'转换为'decimal'”错误吗?是的,我假设是这样,但问题不清楚。