我正在尝试进行查询,返回名为 StatusTaxatieAantal 的对象列表。
public class StatusTaxatieAantal
{
public long Aantal { get; set; }
public long StatusTaxatie { get; set; }
}
我已经有返回列表的 SQL 查询,但现在我需要将其转换为 NHibernate queryover。我对这种编写查询的方式没有经验。这是我创建的 SQL 查询和结果。
SELECT SUB.count,x.StatTax
FROM (VALUES (30),(28),(22),(20),(18),(16),(14),(12),(11),(10),(0)) x(StatTax)
left join
(
SELECT COUNT(*) AS count, wb.StatTax
FROM dbo.Wbp wb
INNER JOIN dbo.tax ta ON wb.WozNum = ta.WozNum AND wb.WrdPeildat = ta.WrdPeildat
INNER JOIN dbo.Woz wo ON wo.WozNum = ta.WozNum
WHERE wb.wrdpeildat = 20170101 AND wb.IsLaatste = 1 AND (wo.Soc < '2000' or wo.Soc = '5100')
GROUP BY wb.StatTax
)
SUB ON x.StatTax = SUB.StatTax
https://imgur.com/Eq2IcTX
count 将是 Aantal,StatTax 将是 StatusTaxatie。如果有人知道如何将其转换为 queryover 或有一个解释它的网站,我想知道。
最佳答案
IList<StatusTaxatieAantal> nietWoningList =
Session.QueryOver(() => wbp)
.JoinAlias(() => wbp.Tax, () => tax)
.JoinAlias(() => tax.Woz, () => woz)
.JoinAlias(() => woz.Soc, () => soc)
.Where(() => wbp.Waardepeildatum == waardePeilDatum)
.And(() => wbp.IsLaatste)
.And(
Restrictions.And(
Restrictions.Gt(Projections.Property(() => soc.Id), "2000"),
!Restrictions.Eq(Projections.Property(() => soc.Id), "5100"))
)
.SelectList(list => list
.SelectCount(() => wbp.WozNummer).WithAlias(() => result.Aantal)
.SelectGroup(() => wbp.StatusTaxatie).WithAlias(() => result.StatusTaxatie)
)
.OrderBy(() => wbp.StatusTaxatie).Desc
.TransformUsing(Transformers.AliasToBean<StatusTaxatieAantal>())
.List<StatusTaxatieAantal>();
此后,我制作一个包含所有状态的列表,并检查返回列表是否有状态。
关于使用 SQL 函数值从 SQL 到 NHibernate 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48984095/