NHibernate QueryOver where子句带有集合

时间:2012-01-06 21:35:00

标签: nhibernate

我正在尝试在NHIbernate查询中对空集合进行简单检查。这是我的代码:

var query = QueryNotDeleted().Where(x=>x.Markets.Count() > 0);

QueryNotDeleted返回IQueryOver。上面的行会抛出一个错误(在epression x.Markets.Count()中无法识别的方法调用),因为它无法识别查询中的Count()。

我试过

var query = QueryNotDeleted().Where(x=>x.Markets != null);

但不幸的是,Markets永远不会是NULL,所以我必须测试一个计数而不是它为null来获取我想要的记录。

如何才能使此“count”语法正确,以便排除Markets属性为空的记录?

2 个答案:

答案 0 :(得分:1)

我能够使用以下方式让它工作:

query.RootCriteria.CreateAlias("Markets", "m", JoinType.LeftOuterJoin);

然后

query.RootCriteria.Add(Restrictions.IsNotNull("m.Id"));

答案 1 :(得分:0)

如果我正确理解了您的问题,您想获得一个没有相应孩子的记录列表吗?

如果我想使用QueryOver获取没有Orders的{​​{1}}列表,那么我会执行以下操作: -

OrderItems

如果这不是正确的答案,那么请你提交你想要运行的SQL和父/子映射/.