Convierte una cadena a decimal en una unión a un grupo de linq

Tengo que unir dos tablas pero devolver solo esos registros en la segunda tabla donde la suma de 'Valor' de todos los registros asociados con el registro en la primera tabla es la misma.

from p in db.TPs
join n in db.TNs
on p.Key equals n.Key
where (decimal.Parse(p.Value) == db.TNs.Where( nn => nn.Key == p.Key )
                                       .Sum( nn=> decimal.Parse(kk.Value)))

Estoy usando Entity Framework Code-First.

Por supuesto, se queja Linq.

LINQ to Entities no reconoce el método 'System.Decimal Parse (System.String)'

Las tablas son enormes y debo reducir la producción, por lo que no es posible hacer esta conversión en el lado del cliente. La conversión del tipo de columna tampoco es una opción.

La consulta SQL es:

select * from TP as p
join * from TN as n on n.Key = p.Key
where p.Value = (select sum(cast(n.Value as decimal(12,2))) from TN where Key = p.Key)

Respuestas a la pregunta(3)

Su respuesta a la pregunta