Почему это важно, в какой форме вы написали это? Нотация запросов так же хороша, как и нотация точек. Во всяком случае, вот мой выстрел в это. Я считаю, что все, что здесь используется, должно быть переводимым.
var ownerRegId = 731752693037116688L;
var excludeTypes = new[] { 'CA00', 'CA01', 'CA03', 'CA04', 'CA02', 'PA00', 'PA01', 'PA02', 'PA03', 'PA04' };
var maxStateChangeMonth = 4;
var excludeStatusId = 999;
var SumOfMonthlyPayments =
context.Accounts
.Join(context.AccountOwners,
a => new { CreditorRegistryId = a.CreditRegistryId, a.AccountNo },
ao => new { ao.CreditorRegistryId, ao.AccountNo },
(a, ao) => new { Account = a, AccountOwner = ao })
.Where(x => x.AccountOwner.AccountOwnerRegistryID == ownerRegId
&& !excludeTypes.Contains(x.Account.AccountType)
&& (x.Account.StateChangeDate == null || x.Account.StateChangeDate.Month - DateTime.Now.Month <= maxStateChangeMonth)
&& x.Account.AccountStatusID != excludeStatusId)
.Sum(x => Math.Abs(x.Account.MinimumInstallment));
И здесь без явного использования объединения:
var ownerRegId = 731752693037116688L;
var excludeTypes = new[] { 'CA00', 'CA01', 'CA03', 'CA04', 'CA02', 'PA00', 'PA01', 'PA02', 'PA03', 'PA04' };
var maxStateChangeMonth = 4;
var excludeStatusId = 999;
var SumOfMonthlyPayments =
context.AccountOwners
.Where(ao => ao.AccountOwnerRegistryID == ownerRegId
&& !excludeTypes.Contains(ao.Account.AccountType)
&& (ao.Account.StateChangeDate == null || ao.Account.StateChangeDate.Month - DateTime.Now.Month <= maxStateChangeMonth)
&& ao.Account.AccountStatusID != excludeStatusId)
.Sum(ao => Math.Abs(ao.Account.MinimumInstallment));