1

我有两个具有主从关系的表(mysql),我想在 Linq 中查询(然后在 LinqPad 中进行实验)。问题是 Linq to SQL 无法为以下查询生成正确的结果或 SQL 语句

from m in masters
select new {
   m.Code,
   m.Total,
   Value = m.details.Sum(d => d.Qty * d.Price * (1 - 6/100))
}

还有一个

from m in masters
select new {
   m.Code,
   m.Total,
   Value = m.details.Sum(d => d.Qty * d.Price * 0.94)
}

第一个查询不会像后者一样产生正确的结果,我在 LinqPad 中检查后的问题在于(1 - 6/100)编译成1.0. 有人可以解释为什么吗?

4

1 回答 1

2

第一个表达式使用整数数学,因此是正确的,但不是您所期望的。您假设 C# 将从整数文字推断浮点语义。第二个表达式是一个简单的双重文字。

在整数数学中,6/100是 0,所以(1 - 6/100)是 1。您需要通过使分子或分母成为双精度字面量来强制除法表达式使用双精度值。

而是尝试:

Value = m.details.Sum(d => d.Qty * d.Price * (1 - 6/100.0))

请注意.0使之成为双重表达式。

于 2012-09-11T03:41:02.103 回答