Caste ActiveRecord-LINQ最適化クエリ
-
05-07-2019 - |
質問
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人だけが取得されることがわかります。
これを行うより良い方法があるかどうか知りたいです。使用するユーザーが増えると、クエリが遅くなり、最適化されません...
解決
これが起こることです。
- メソッドUser.FindAll()は、すべてのユーザーの配列を返します。 (DBから100行)
- 次に、同じ配列を注文してフィルタリングします。
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ユーザーガイドをご覧ください。
>所属していません StackOverflow