Вообще говоря, они делают ту же работу.
Тем не менее, обозначение в скобках дает вам возможность делать вещи, которые вы не можете делать с точечными обозначениями, например
var x = elem["foo[]"]; // can't do elem.foo[];
. Это может быть распространено на любое свойство, содержащее специальные символы.
Вы пытались добавить свое exists
кондиционирование к своим объединениям?
from a in context.AEntity
Join B in context.BEntity on A.Key equals B.Key && B.Name == "Joe"
Join C in context.CEntity on B.Key equals C.Key && C.Name == "Kim";
Не уверен, что это сработает, но стоит попробовать.