将my sql查询转换为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,

有人能帮助我或让我开始将此查询转换为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,
    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