2012-09-11 36 views
1

我有兩個表(mysql),我想在Linq中查詢master-detail關係(然後在LinqPad中進行實驗)。問題是LINQ到SQL不能產生正確的結果,也沒有SQL語句下面的查詢Linq to 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.0(1 - 6/100)之內。有人能解釋爲什麼嗎?

回答

2

第一個表達式使用整數數學,因此是正確的,只是不是你所期望的。你已經假設C#會從整數文字中推斷出浮點語義。第二個表達式只是一個雙重字面意思。

在整數運算,6/100是0,所以(1 - 6/100)是1,則需要裹脅分割成表達通過使分子或分母雙字面採用雙值。

而是嘗試:

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

注意.0做了雙表達。

+0

哦,這是正確的,我完全忘了這一點。非常感謝。 – qsoft