我正在创建一个具有如下条件的查询:
DetachedCriteria auftragCriteria = DetachedCriteria.For<Auftrag>("a");我使用以下命令连接多个表:
DetachedCriteria positionJoin = auftragCriteria.CreateCriteria("a.Positionen", "p", JoinType.LeftOuterJoin);我使用投影来填充我的object SubTypeAuftrag
ProjectionList projectionListSubTypeAuftrag = Projections.ProjectionList();现在,我需要重新创建以下sql代码:
cast(sum(p.length * p.width / 1000) as decimal)我尝试了以下几种方法:
projectionListSubTypeAuftrag.Add(Projections.Sum<Position>(p => p.length * p.width / 1000), "M1");这会导致一个错误:
System.InvalidOperationException: 'variable 'p' of type 'xxx.Base.Position' referenced from scope '', but it is not defined'我也试过了:
projectionListSubTypeAuftrag.Add(
Projections.Cast(
NHibernateUtil.Decimal,
Projections.SqlProjection("p.length * p.width/ 1000 AS result", new[] { "result" }, new IType[] { NHibernateUtil.Double })
),
"M1"
);如何告诉nHibernate在哪里可以找到length/width列?
发布于 2020-07-22 14:28:58
也许这会给你指明正确的方向。
var sqlMultiply = new VarArgsSQLFunction("(", "*", ")");
var sqlDivide = new VarArgsSQLFunction("(", "/", ")");
var multiplyLengthWidthProj = Projections.SqlFunction(sqlMultiply, NHibernateUtil.Decimal, Projections.Property(() => alias.Length), Projections.Property(() => alias.Width));
var sumProjection = Projections.ProjectionList().Add(Projections.Sum(Projections.SqlFunction(sqlDivide, NHibernateUtil.Decimal, multiplyLengthWidthProj, Projections.Constant(1000))));https://stackoverflow.com/questions/61365642
复制相似问题