将my sql查询转换为nhibernate queryover
有人能帮助我或让我开始将此查询转换为nhibernate queryover查询吗将my sql查询转换为nhibernate queryover,nhibernate,queryover,Nhibernate,Queryover,有人能帮助我或让我开始将此查询转换为nhibernate queryover查询吗 SELECT Campaign.Id, Location.Name, Location.PrimaryPostcode, Inventory.Section, Campaign.Sov, IFNULL(Contracts.Spend, 0) AS Spend, IFNULL(Contracts.Impressions, 0) AS Impressions,
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()
合同的“合同”属性是一种自引用关系。这不是1:1。您需要显示或解释映射是如何完成的。如果您要将
合同
加入自身,那么您需要告诉它加入什么,否则它会在主键上加入。如果您使用的是最新的nhibernate,我相信您可以使用进行a,并告诉它加入到不同的列中。如果还没有,您可以使用.underyingCriteria
来完成。我已经得出结论,这在queryover中是无法完成的。至少不是以最佳方式。无法加入一个投影,然后从中进行选择,这几乎是一个阻碍
FROM Contract this_ left outer join Contract contract1_ on this_.Id=contract1_.Id