我使用Castle ActiveRecord作为我的持久层。
我有这个函数必须从数据库中返回前20个用户。
IList<User> users = new List<User>();
var userQuery = from u in User.FindAll()
orderby u.CreationDate
select u;
return userQuery.Take(20).ToList();
在我的数据库中,我目前有100个用户,我只希望我的查询返回20个用户而不是100个。
当我监控log4net发生了什么时,我看到该查询首先得到100个用户,之后,只取20个第一。
我想知道是否有更好的方法来做到这一点。因为我拥有的用户越多,我的查询就越慢而且没有优化......
答案 0 :(得分:3)
这就是发生的事情..
使用AR 2.0,您可以使用ActiveRecordLinqBase而不是ActiveRecordBase,而使用.Queryable代替.FindAll()。
此查询将仅返回数据库中的20条记录。
var userQuery = (from u in User.Queryable
orderby u.CreationDate
select u).Take(20).ToList();
答案 1 :(得分:0)
创建一个具有“SetMaxResults”方法的自定义HQL查询。有关示例,请参阅ActiveRecord Users guide。