使用不带子查询的QueryOver的HQL大小

时间:2012-01-30 20:06:10

标签: nhibernate

希望有人能回答这个问题。

我知道我可以使用hql(下面的伪代码)

执行以下操作
var hql = "from objectA l where size(l.ChildCollection) > 0";

var data = Session.CreateQuery(hql)
            .List<objectA>();

有没有想知道你是否可以使用QueryOver做类似的事情。不使用子查询。我在ChildCollection上有一个会话过滤器。

不幸的是,

var query = QueryOver.Of<ObjectA>()
.WhereRestrictionOn(x => x.ChildCollection).IsNotEmpty();

可生产,

WHERE
    exists(
        select
            1 
        from
            [ChildCollection] 
        where
            this_.Id=ObjectA_Id
    );

Hql产生的位置,

where
(
   select
       count(childcollection1_.ObjectA_Id) 
   from
       [ChildCollection] childcollection1_ 
    where
       objectA0_.Id=childcollection1_.ObjectA_Id 
       and childcollection1_.DTCreated between @p0 and @p1
    )>0

干杯

Tanzy

1 个答案:

答案 0 :(得分:0)

var query = QueryOver.Of<ObjectA>().WhereRestrictionOn(x => x.ChildCollection).IsNotEmpty();

两个查询都会生成类似的sql:

SELECT this_.Id
FROM   [ObjectA] this_
WHERE  exists(select 1 from [ChildObjectB] where this_.Id = [key])

这是你想要达到的目标吗?