Внедрить первый последний в Nhibernate - PullRequest
0 голосов
/ 03 апреля 2012

Я пытаюсь реализовать First и Last в моей навигации, используя nhibernate. По нажатию первой я могу найти первую строку, используя данную функцию

public IList<T> GetFirstItem<T>()
    {
        using (ISession session = MvcApplication.SessionFactory.GetCurrentSession())
        {
            using (session.BeginTransaction())
            {
                return session.CreateCriteria(typeof(T)).SetFirstResult(0)
                .SetMaxResults(1)
               .List<T>();
            }
        }
    }

Но я не могу реализовать последнюю кнопку. Я не хочу использовать два запроса. Можно ли найти последний элемент в одном запросе Nhibernate?

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

Ваша реализация GetFirstItem() не гарантирует возврата первого элемента, поскольку запрос на выборку может возвращать элементы в любом порядке, в котором он пожелает. Таким образом, вы получите первый результат в случайном списке.

Чтобы ваш метод работал правильно, вам нужно добавить вызов .AddOrder(Order.Asc("<some property>")) к вашим критериям, где <some property> может быть идентификатором базы данных или отметкой времени создания.

Чтобы получить последний элемент, добавьте вместо него .AddOrder(Order.Desc("<some property>")).

(Кстати, почему вы возвращаете список из метода, который должен получить вам только один элемент?)

1 голос
/ 03 апреля 2012

Я думаю, что вы, вероятно, хотите использовать какую-то сортировку для определения первого и последнего элементов, поэтому вы можете использовать сортировку ASC, чтобы получить первый, и использовать DESC, чтобы получить последний, добавив сортировку в ваш текущий код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...