1

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 番目の引数の間のコンマには、")" が必要です。どうしたの?

4

1 に答える 1

1

Aggregate 関数を使用する特定の理由はありますか? 最初のクエリの加重平均を計算したいだけの場合は、次のようにすることができます。

Dim q1 = From jd In oContext.JobDatas
         Where jd.Year = 2011
         Select jd
Dim avg As Double = q1.WeighedAverage(Function(num) num.AvSalary, Function(num) num.NumPosHolder)
于 2012-05-14T16:02:57.410 に答える