【发布时间】:2011-01-17 21:30:17
【问题描述】:
当需要根据复杂标准的数据集时,什么会产生最佳性能?有两种选择:创建一个复杂的 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(使用根对象进行“内存中”查询,这可能意味着将从 SQL Server 中提取大型结果集):
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;
in-memory 变体不会在 NHPRof 中生成警告,但是 Session 变体会生成警告,即过多的连接可能会降低性能。
【问题讨论】:
标签: c# linq nhibernate