从Decimal转换ToDecimal?返回有时会返回null而不是0

时间:2017-02-13 21:22:57

标签: c# linq

在我的测试中,结果返回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

1 个答案:

答案 0 :(得分:11)

LINQ查询从未实际执行为C#代码。它被编译成一个表达式,该表达式被传递给查询提供程序,该查询提供程序能够检查您编写的内容并创建一个语义上等效的SQL查询。当然,虽然它尽力使完全相同的语义,但它并不总是成功,因为查询提供程序没有正确翻译那些语义,或者有时因为查询的数据库是正在编写的没有具有所需语义的操作(或者可能因为它故意创建稍微不同的语义)。