我找不到如何加入两个不同的QueryOver,分组并在select中执行减法。
说你有:
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>(). ???
我尝试将entitiesB存储在别名中并对其执行JoinAlias但我有一个例外,因为它无法检索我的别名。
你有解决方案吗?
我不想在这两个人之间建立一个参考。
答案 0 :(得分:0)
简短答案不是,如果您的实体未通过模型连接,则无法执行QueryOver
。
一种解决方案是使用NHibernate.Linq
和子查询
var session = GetCurrentSession();
var entityBQuery = session.Query<EntityB>();
var entityAQuery = session.Query<EntityA>()
.Select(eA=>new { Id = eA.Id,
Description = eA.Description,
Quantity = eA.Quantity - entityBQuery.Where(eb=>eb.EntityAId = eA.Id).Count()
});