在我的测试中,结果返回0
decimal? t = null;
decimal result = Convert.ToDecimal(t);
但是在我的Linq查询中
var query = from c in dc.DataContext.vw_WebOrders
select new CisStoreData()
{
Discount = Convert.ToDecimal(c.Discount)
};
Convert.ToDecimal()
返回null
,我的查询在转换为List时抛出异常,因为Discount不可为空。为什么会这样?小数无效总是返回0
?
答案 0 :(得分:11)
LINQ查询从未实际执行为C#代码。它被编译成一个表达式,该表达式被传递给查询提供程序,该查询提供程序能够检查您编写的内容并创建一个语义上等效的SQL查询。当然,虽然它尽力使完全相同的语义,但它并不总是成功,因为查询提供程序没有正确翻译那些语义,或者有时因为查询的数据库是正在编写的没有具有所需语义的操作(或者可能因为它故意创建稍微不同的语义)。