Moim celem jest uzyskanie średniej ważonej z jednej tabeli, w oparciu o klucz podstawowy innej tabeli.Obliczanie średniej ważonej przy użyciu LINQ
Przykład Dane:
Tabela 1
Key WEIGHTED_AVERAGE
0200 0
Tabela 2
ForeignKey Length Value
0200 105 52
0200 105 60
0200 105 54
0200 105 -1
0200 47 55
trzeba uzyskać średnią ważoną w oparciu o długość odcinka i muszę ignorować wartości -1 . Wiem, jak to zrobić w SQL, ale moim celem jest zrobić to w LINQ. Wygląda to mniej więcej tak w 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;
jestem jeszcze całkiem nowy, LINQ, a twardy czas na zastanawianie się, jak bym tego tłumaczyć. Średnia ważona wyników powinna wynosić około 55,3. Dziękuję Ci.
Dzięki, bardzo pomocne. I skończyłem przeprowadzenie tej jeden liner ... public static pływak WeightedAverage (ta IEnumerable przedmioty, Func wartość, Func waga) { powrót items.Sum (pozycja => wartość (pozycja) * waga (pozycja))/items.Sum (waga); } –
josefresno
Musiałem dodać "If weightedSum.AlmostZero() zwraca 0" po obliczeniach, aby zabezpieczyć się przed dzieleniem przez zero, gdy wszystkie wagi i lub wszystkie wartości są zerowe. AlmostZero jest funkcją rozszerzenia, która sprawdza, czy podwójne jest równe zero. – derdo