Каста 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 пользователей, я хочу, чтобы мой запрос возвращал только 20 пользователей, а не 100.
Когда я наблюдаю за тем, что происходит с log4net, я вижу, что запрос сначала получает 100 пользователей, а затем только 20 первых.
Я хотел бы знать, есть ли лучший способ сделать это. Потому что чем больше у меня будет пользователей, тем больше мой запрос будет медленным и не оптимизирован ...
Решение
Вот что происходит ..
<Ол>С помощью AR 2.0 вы можете использовать ActiveRecordLinqBase вместо ActiveRecordBase и использовать .Queryable вместо, если .FindAll (). р>
Этот запрос вернет только 20 записей из базы данных.
var userQuery = (from u in User.Queryable
orderby u.CreationDate
select u).Take(20).ToList();
Другие советы
Создайте пользовательский запрос HQL, который имеет " SetMaxResults " метод. См., Например, руководство пользователя ActiveRecord .