Visual Basic 2010 で加重平均を計算するために、次の汎用 LINQ 拡張機能を作成しました。
<Extension()>
Function WeightedAverage(Of T)(ByVal source As IEnumerable(Of T),
ByVal selectorValue As Func(Of T, Integer),
ByVal selectorWeight As Func(Of T, Integer)) As Double
Dim weightedValueSum As Double
Dim weightSum As Integer
weightedValueSum = (From element In source
Select (selectorValue(element) * selectorWeight(element))).Sum()
weightSum = (From element In source
Select selectorWeight(element)).Sum()
If weightSum <> 0 Then
Return weightedValueSum / weightSum
Else
Return 0
End If
End Function
この関数を別の LINQ クエリの集計関数として呼び出すにはどうすればよいですか?
私は次の方法でそれを試しました:
Dim q1 = From jd In oContext.JobDatas
Where jd.Year = 2011
Select jd
Dim q2 = Aggregate num In q1 Into WeightedAverage(num.AvSalary, num.NumPosHolder)
Visual Basic 2010 エディターは、次のコードの 2 番目のクエリ (q2) が有効なステートメントではないことを示しています。最初の引数と 2 番目の引数の間のコンマには、")" が必要です。どうしたの?