【发布时间】:2012-05-01 01:49:30
【问题描述】:
public IEnumerable<UserReadNews> GetLatestUserReadNews(IEnumerable<string> userIds)
{
IQuery query = Session.CreateQuery("from UserReadNews as j where j.FacebookUser_id in (:userIds)");
query.SetParameterList("userIds", userIds );
return query.List();
}
我有这种方法,我想尽可能延迟地返回这些数据,因为我正在确定要显示哪些数据然后停止。我不希望针对整个表执行整个查询。
我关心的是 List() 方法。这是懒惰还是渴望?
当我完成所需的操作后,我可以从另一个方法和yield break 调用此方法吗?
【问题讨论】:
-
延迟加载仅适用于子实体和查找的上下文。在您的查询中,如果查询结果有 500 万行,您的代码仍然会获取 100 万行,您宁愿将 LIMIT 子句或 TOP 子句放在那里
-
懒加载有两种,一种发生在ORM-database操作中,我上面提到过。另一种是在语言中,
ToList()急切地将元素加载到内存对象中。我不知道List()是否急切地加载对象。尝试检查List返回对象的对象类型,如果是List或List<classhere>,则为热切加载。如果是IQueryable、IQueryable<classhere>、IEnumerable或IEnumerable<classhere>,则为延迟加载
标签: c# hibernate nhibernate yield lazy-evaluation