質問

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人のユーザーがいますが、クエリで100人ではなく20人のユーザーのみが返されるようにします。

log4netで何が起こっているかを監視すると、クエリが最初に100人のユーザーを取得し、その後20人だけが取得されることがわかります。

これを行うより良い方法があるかどうか知りたいです。使用するユーザーが増えると、クエリが遅くなり、最適化されません...

役に立ちましたか?

解決

これが起こることです。

  1. メソッドUser.FindAll()は、すべてのユーザーの配列を返します。 (DBから100行)
  2. 次に、同じ配列を注文してフィルタリングします。

AR 2.0 を使用すると、ActiveRecordBaseの代わりにActiveRecordLinqBaseを使用し、代わりに.Queryableを使用できます。 .FindAll()。

このクエリは、データベースから20レコードのみを返します。

var userQuery = (from u in User.Queryable
                orderby u.CreationDate
                select u).Take(20).ToList();

他のヒント

&quot; SetMaxResults&quot;を持つカスタムHQLクエリを作成します。方法。例については、 ActiveRecordユーザーガイドをご覧ください。

>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top