Caste ActiveRecord - LINQ优化查询

时间:2009-11-26 20:49:08

标签: linq nhibernate c#-3.0 castle-activerecord

我使用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个第一。

我想知道是否有更好的方法来做到这一点。因为我拥有的用户越多,我的查询就越慢而且没有优化......

2 个答案:

答案 0 :(得分:3)

这就是发生的事情..

  1. User.FindAll()方法返回所有用户的数组。 (来自DB的100行)
  2. 然后您订购并过滤同一个数组。
  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