Cálculo del promedio ponderado con LINQ

Mi objetivo es obtener un promedio ponderado de una tabla, basado en la clave principal de otra tabla.

Datos de ejemplo:

Tabla 1

Key     WEIGHTED_AVERAGE

0200    0

Tabla 2

ForeignKey    Length    Value
0200          105       52
0200          105       60
0200          105       54
0200          105       -1
0200          47        55

Necesito obtener un promedio ponderado basado en la longitud de un segmento y tengo que ignorar los valores de -1. Sé cómo hacer esto en SQL, pero mi objetivo es hacerlo en LINQ. Se ve algo así en 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;

Todavía soy bastante nuevo en LINQ y me resulta difícil descubrir cómo traduciría esto. El promedio ponderado del resultado debería llegar a aproximadamente 55,3. Gracias.

Respuestas a la pregunta(3)

Su respuesta a la pregunta