Я написал следующее общее расширение LINQ для вычисления средневзвешенного значения в Visual Basic 2010:Generic LINQ расширение для вычисления средневзвешенного в Visual Basic 2010
<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)
Визуальный редактор Basic 2010 говорит мне, что второй запрос (q2) следующего кода не является действительным заявление. В запятой между первым вторым аргументом говорится: «)». Что не так?
Я не очень хорошо знаком с заполнителем, но если не вызывается как метод расширения, WeightedAverage принимает три параметра, и вы просто пройти два параметры. Это не сработает. –