【发布时间】:2015-04-16 22:42:00
【问题描述】:
我找不到如何加入两个不同的 QueryOver、分组并在选择中执行减法。
说你有:
public class EntityA
{
public virtual int Id;
public virtual string Reference;
public virtual int Quantity;
[Some properties]
}
public class EntityB
{
public virtual int Id;
public virtual int EntityAId;
[Some properties]
}
如果我用伪 SQL 翻译我的查询,我希望:
SELECT A.Id, A.Reference, A.Quantity - COALESCE(DERIV_B.TOTAL, 0)
FROM EntityA A
LEFT JOIN (
SELECT B.EntityAId, COUNT(B.Id) AS TOTAL
FROM EntityB B
GROUP BY B.EntityAId) DERIV_B
ON A.Id = DERIV_B.EntityAId
WHERE (A.Quantity - COALESCE(DERIV_B.TOTAL, 0)) >= 0
我可以通过 QueryOver 在 EntityB 上进行子查询,但我无法加入 EntityA:
var entitiesB = GetCurrentSession().QueryOver<EntityB>().SelectList(select => select.SelectGroup(x => x.EntityAId).SelectCount(x => x.Id));
var entitiesA = GetCurrentSession().QueryOver<EntityA>(). ???
我尝试将实体 B 存储在别名中并对其执行 JoinAlias 但我有一个异常,因为它无法检索我的别名。
你有什么解决办法吗?
我不想在这两个实体之间创建引用。
【问题讨论】:
-
幸运的是,答案非常简单:实体之间没有引用,没有 QueryOver 连接。您可以:更改您的域模型或使用本机 SQL 查询。
标签: nhibernate queryover