我的目標是根據另一個表主鍵從一個表中獲得加權平均值。用LINQ計算加權平均值
實施例的數據:
表1
Key WEIGHTED_AVERAGE
0200 0
表2
ForeignKey Length Value
0200 105 52
0200 105 60
0200 105 54
0200 105 -1
0200 47 55
我需要基於一個段的長度,以得到的加權平均和我需要忽略的值-1 。我知道如何在SQL中執行此操作,但我的目標是在LINQ中執行此操作。它在SQL中看起來像這樣:
SELECT Sum(t2.Value*t2.Length)/Sum(t2.Length) AS WEIGHTED_AVERAGE
FROM Table1 t1, Table2 t2
WHERE t2.Value <> -1
AND t2.ForeignKey = t1.Key;
我對LINQ還很新,很難搞清楚我將如何翻譯它。結果加權平均值應該約爲55.3。謝謝。
謝謝,非常有幫助。我結束了這使其成爲一個班輪...公共靜態浮動WeightedAverage(這IEnumerable的項目,Func鍵值,Func鍵重量) { 回報items.Sum(項目=>值(項目)*重量(項目) )/ items.Sum(重量); } –
josefresno
2010-10-19 22:00:07
在計算之後,我必須添加「如果weightedSum.AlmostZero()返回0」,以防止在所有權重和/或所有值都爲零時被零除。 AlmostZero是一個擴展函數,用於檢查double是否爲零。 – derdo 2011-07-13 22:10:46