Оператор GROUP JOIN означает, что вы пытаетесь выполнить LEFT OUTER JOIN.Вот почему вы получаете NULL проблему.Используя JOIN для INNER JOIN, вы не будете сталкиваться с этим, но это также означает, что вы будете видеть только те элементы, которые имеют интересующие вас значения.
(FROM a in db.Payments
Join b in db.InterestCharges ON a.pid Equals b.Pid
SELECT a, TotalInterestReceived = SUM(b.Interest)
).toList()
Можно создать дополнительный выбор, который может получить значения, на которые вы надеетесь.Цель состоит в том, чтобы вы получили все платежи, а затем в основном добавили процентные платежи (или 0, если таковых нет).
(From a In db.Payments
Select a
, TotalInterestRecieved = (From b in db.InterestCharges
Where b.pid = a.pid
select b.Interest).DefaultIfEmpty(0).Sum()
).ToList
РЕДАКТИРОВАТЬ:
Другой вариант будет полностью обойти EF.Создайте представление в базе данных и запросите это представление напрямую, а не пытайтесь получить доступ к базовым данным через LINQ.
Большинство других предложений, которые у меня были бы, включали бы повторение первоначального списка «Платежей» и заполнение значений по мере необходимости.Что подходит для небольшого количества «Платежей», но это решение O (n).