Может ли кто-нибудь помочь мне или начать с преобразования этого запроса в запрос запроса nhibernate?
SELECT
Campaign.Id,
Location.Name,
Location.PrimaryPostcode,
Inventory.Section,
Campaign.Sov,
IFNULL(Contracts.Spend, 0) AS Spend,
IFNULL(Contracts.Impressions, 0) AS Impressions,
IFNULL(Days, 0) Days,
RenewalDate,
LastContract.OptIn
FROM
Contract AS Campaign
JOIN Inventory ON Campaign.InventoryId = Inventory.Id
JOIN Location ON Inventory.LocationId = Location.Id
LEFT OUTER JOIN (
SELECT
CampaignId,
SUM(RackRate) AS Spend,
SUM(Impressions) AS Impressions,
1 + DATEDIFF(Now(), MIN(StartDate)) AS Days,
DATE_SUB(MAX(EndDate), INTERVAL 11 Day) AS RenewalDate,
MAX(StartDate) AS CurrentOrNextStartDate
FROM
Contract
LEFT OUTER JOIN Creative On Creative.ContractId = Contract.Id
LEFT OUTER JOIN CreativeLog On Creative.Id = CreativeLog.CreativeId
GROUP BY
CampaignId
) AS Contracts ON Campaign.Id = Contracts.CampaignId
LEFT OUTER JOIN (
SELECT
CampaignId,
Id,
Optin,
StartDate
FROM
Contract
) AS LastContract ON Campaign.Id = LastContract.CampaignId AND Contracts.CurrentOrNextStartDate = LastContract.StartDate
WHERE
Campaign.AgencyId = '04ba6b28-a7a0-4448-b21f-9f2b00a4621b'
ORDER BY
RenewalDate,
Location.Name,
Inventory.Section
Я не прошел мимо:
_session.QueryOver<Contract>()
.Left.JoinQueryOver<Contract>(campaign => campaign.Contracts).List()
А именно потому, что nhibernate генерирует предложение on между двумя псевдонимами таблицы Id == Id, когда оно должно быть CampaignId == Id.
FROM Contract this_ left outer join Contract contract1_ on this_.Id=contract1_.Id
Свойство Контракта "Контракты" - это ссылка на себя. Это не 1: 1 tho.