首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nhibernate Join 2 QueryOver

Nhibernate Join 2 QueryOver
EN

Stack Overflow用户
提问于 2015-02-16 20:09:11
回答 1查看 444关注 0票数 0

我找不到如何连接两个不同的QueryOver,group by和执行select中的减法操作。

假设你有:

代码语言:javascript
复制
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转换我的查询,我希望有:

代码语言:javascript
复制
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上连接:

代码语言:javascript
复制
var entitiesB = GetCurrentSession().QueryOver<EntityB>().SelectList(select => select.SelectGroup(x => x.EntityAId).SelectCount(x => x.Id));

var entitiesA = GetCurrentSession().QueryOver<EntityA>(). ???

我试图将entitiesB存储在别名中并对其执行JoinAlias,但出现了一个异常,因为它无法检索我的别名。

你有什么解决方案吗?

我不想在这两个实体之间创建引用。

EN

回答 1

Stack Overflow用户

发布于 2015-02-16 20:28:20

简短的回答是,如果你的实体不是通过模型连接的,你就不能做QueryOver。一种解决方案是使用NHibernate.Linq和子查询

代码语言:javascript
复制
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()
                                          }); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28541120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档