Sql JoinAlias与Joinquery关于行数差异的比较
据我所知,除了返回对象之外,JoinAlias在功能上应该与joinquery在所有方面都类似。IE JoinAlias返回外部IQueryOver,JoinQueryOver为join对象返回一个。但是,在以下示例中:Sql JoinAlias与Joinquery关于行数差异的比较,sql,nhibernate,Sql,Nhibernate,据我所知,除了返回对象之外,JoinAlias在功能上应该与joinquery在所有方面都类似。IE JoinAlias返回外部IQueryOver,JoinQueryOver为join对象返回一个。但是,在以下示例中: query.Left.JoinAlias(() => eventAlias.Children, () => childAlias); query.Where(() => childAlias.Name.IsIn(SearchCriteri
query.Left.JoinAlias(() => eventAlias.Children, () => childAlias);
query.Where(() => childAlias.Name.IsIn(SearchCriteria.SelectedNames.ToArray()));
行数是29
但在这里:
query.Left.JoinQueryOver(s => s.Children).Where(Restrictions.In(Projections.Property<Child>(x => x.Name),
SearchCriteria.SelectedNames.ToArray()));
query.Left.JoinQueryOver(s=>s.Children).Where(Restrictions.In(Projections.Property(x=>x.Name)),
SearchCriteria.SelectedNames.ToArray());
query.RowCount();返回18
18岁正是我想要的。数据库中有18个条目
我对DistinctRootEntityResultTransformer()做了一些研究,它将别名后的计数增加到14,但这仍然是不正确的
在较高的层次上,我想更好地了解正在发生的事情,在直接的层次上,我想知道如果需要使用Alias,该怎么做
谢谢
---编辑---
这应该是一个左连接,因为计数可以是0,我只需要父项。如回答中所述,当我使用相同的联接(左)运行完全相同的筛选器时,结果是相同的。但是,当没有人搜索时,我仍然会创建别名,而且根本没有过滤,我得到了29个别名。第一个问题解决了。第二个是关于笛卡尔积 选中此项: 当我们把根和子元素连接起来时,结果集就会成倍增加。会有和我们孩子一样多的争吵。我们没有那么多根 我的建议是,使用批处理抓取来事后加载集合,只查询根实体。要按子项筛选,请使用子查询 检查如何使用批处理获取:
- 文件-