2011-08-05 26 views
4

我正在運行一個LINQ查詢,它使用本地「let」變量來計算本地值,以便與傳入查詢的參數進行比較。Math.Round() - LINQ查詢

我有以下查詢:

let percentage = Math.Round((Double)((completed/total)*100),0,MidpointRounding.ToEven) 

正如你可以在我的查詢看到,我比較的結果是:

Items = from lead in Items 
     let total = lead.NurtureActions.Count(q => !q.Deleted) 
     let completed = lead.NurtureActions.Count(nurtureAction => nurtureAction.Completed && !nurtureAction.Deleted) 
     let percentage = Math.Round((Double)((completed/total)*100),0,MidpointRounding.ToEven) 
     where 
      total>0 && 
      percentage == progress 
     select lead; 

這是非常重要的上面是以下行的部分該查詢與progress,這是傳遞到我的函數。

例如:我可能會傳遞值8,所以progress將具有值8。但是計算出的percentage最初可能是8.223,但我需要這樣做到8

我相信我正確地做了這件事,但出於某種原因,有些東西無法正常工作。

任何想法可能會引發四捨五入?我也嘗試了四捨五入的AwayFromZero選項,但那也行不通。

編輯對於那些請求更多信息的人,我不確定它計算的是什麼值。我對調試LINQ查詢沒有經驗,並且不知道從哪裏開始找出該值。我會提供它,如果我知道如何得到它。

+3

會發生什麼?你在調試器中看到了什麼值? – SLaks

+0

「...某些功能無法正常工作。」什麼工作不正常?你在看什麼?它是否應該圓整? – Kiril

+0

你已經說過兩次「不行」 - 但沒有說實際發生了什麼。 –

回答

7

隨機猜測:totalcompletedint s,所以(completed/total)會導致截斷值。截斷值乘以100然後然後轉換爲double

我想這在某些情況下會產生意想不到的結果,如果您預計(completed/total)返回double

修復:

let total = (double)lead.NurtureActions.Count(...) 
let completed = (double)lead.NurtureActions.Count(...) 
let percentage = Math.Round((completed/total)*100, ...)