У вас есть два варианта.
Во-первых, используйте навигационные свойства. Я спросил , почему люди используют соединения вместо свойств навигации некоторое время назад, и ответы подтвердили мое понимание - реальная причина редко бывает, и обычно это ошибка. Как предлагают другие ответы здесь, используйте некоторые предложения where для фильтрации графа вашего объекта.
db.tblCustomerPricingSchemes.Where(x => condition).Select(scheme =>
new { scheme, scheme.LangPair, scheme.LangPair.PricingScheme });
Однако, если вам нужно присоединиться, попробуйте разрешить внешнее объединение в предложении where, выполнив несколько нулевых проверок.
where t.JobID == jobID
&& (s.PSLangPairID == null
|| l.LangPairs == null
|| s.PSLangPairID == l.LangPairs)
&& (p.PSDescID == null
|| c.PricingID == null
|| p.PSDescID == c.PricingID)
если бы это был SQL, вы используете оператор объединения, но не уверены, что это сработает, и снова зависит от того, используете ли вы LINQ-to-SQL или Entity Framework.
&& (s.PSLangPairID ?? l.LangPairs) == l.LangPairs
&& (p.PSDescID ?? c.PricingID) == c.PricingID