Я пытаюсь преобразовать сложный (и довольно хакерский) динамический запрос SQL в запрос LINQ.
Пока у меня есть следующий запрос LINQ:
var results = (
from c in Customers
from d in MonthCalendar
join f in Facilities on c.CustomerCode equals f.CustomerCode
join p in ProjectedCashFlows on f.FacilityId equals p.FacilityId into pj
from p in pj.DefaultIfEmpty()
where d.ExpectedYear == currentYear
&& f.FacilityStatusId == 1
&& (p.ExpectedYear == null || d.ExpectedYear == p.ExpectedYear)
&& (p.ExpectedMonth == null || d.ExpectedMonth == p.ExpectedMonth)
&& c.PrimaryArmId == userId
&& (p.ProjectedCashFlowStatusId == null || p.ProjectedCashFlowStatusId != 4)
select new
{
CustomerCode = c.CustomerCode,
CustomerName = c.CustomerName,
FacilityId = f.FacilityId,
FacilityDescription = f.FacilityProductDescription,
FacilityCurrency = f.FacilityCurrencyId,
FacilityLimit = f.Limit,
ExpectedYear = d.ExpectedYear,
ExpectedMonth = d.ExpectedMonth,
ExpectedAmount = p == null ? 0 : (double)p.ExpectedAmount
}
);
Я пытаюсь получить информацию из таблицы Customer
, которая имеет отношение один ко многим с таблицей Facilities
. Затем я пытаюсь получить какие-либо данные, расположенные в ProjectedCashFlows
Проблема, с которой я столкнулся, заключается в том, что запрос должен возвращать всю информацию Customer
и Facilites
независимо от того, существуют ли какие-либо значения в таблице ProjectedCashFlows
.
К сожалению, этот запрос этого не делает - он возвращает информацию Customer
и Facilities
только тогда, когда объект существует в таблице ProjectedCashFlows
.
Я использовал таблицу MonthCalender
для перечисления каждого месяца в году.
Соответствующая информация таблицы:
Пользователи
- CustomerCode
- CustomerName
- PrimaryArmId
Услуга
- CustomerCode
- FacilityId
- FacilityCurrencyId
- FaciliyLimit
- FacilityDescription
ProjectedCashFlows
- CustomerCode
- FacilityId
- ExpectedYear
- ExpectedMonth
- ExpectedAmount
- ProjectedCashFlowStatusId
MonthsCalendar
- ExpectedMonth
- ExpectedYear
В качестве примера у меня есть клиент, у которого есть 4 строки в таблице Facilities
, однако 2 из этих средств не отображаются в таблице ProjectedCashFlows
, поэтому они не отображаются.
Если запись не существует в ProjectedCashFlows
, она должна взять ExpectedMonth & ExpectedYear из таблицы CalendarMonths
, вернуть 0 для ExpectedAmount и использовать FacilityId из таблицы Facilities
.
Как вы уже, наверное, поняли, я только начал использовать LINQ.
Может кто-нибудь ткнуть меня в правильном направлении?