根据复杂标准需要数据集时,最佳性能是什么?有两种选择:创建复杂的ICriteria或Session.Linq语句,或者使用来自根对象的LINQ,让NHibernate处理延迟加载。
选项1(使用会话):
var result = Session.Linq<Contractor>().Where(contractor => contractor.account == "bla@account.com)
//....
.Where(condition => condition.Orders.Any(condition))
//... more conditions
选项2(使用root对象进行“内存中”查询,这可能意味着将从SQL服务器中提取大型结果集):
var contractor = Session.Linq<Contractor>().Single(c => c.Id == 1);
contractor.Orders.SelectMany(o => o.NestedCollection)
.Where(c => c.List.Any(condition))
.Where(//..... more complex filtering;
内存中的变体不会在NHPRof中生成警告,但是,Session变体会生成警告,即过多的连接可能会使性能陷入困境。