Как отрендерить Max (Substring) с помощью лямбда-расширений - PullRequest
2 голосов
/ 28 мая 2010

Я использую NHibernate с Lambda Extensions. Я хотел бы знать, как вложить функцию Max с подстрокой.

Следующая инструкция возвращает Max("invoice_id")

var ret = session
          .CreateCriteria<Invoice>()
          .SetProjection(Projections.Max("invoice_id"))
          .UniqueResult();

но в моем случае поле invoice_id создается следующим образом: 12345.10, где 12345 - номер счета, а 10 - текущий год (2010). Более того, каждый год номер счета начинается с 1. Поэтому мне нужно рассчитать функцию Max только по первым 5 цифрам. Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 28 июля 2010

Вы должны создать структуру и пользовательский тип NHibernate для номера счета, а не полагаться на манипуляции со строками.

Тип struct и nh будет инкапсулировать всю логику для сравнения и сортировки.

http://intellect.dk/post/Implementing-custom-types-in-nHibernate.aspx

0 голосов
/ 16 июня 2010

Вы можете использовать серверную функцию, такую ​​как SUBSTRING (или ее эквивалент в вашей СУБД), например:

var ret = session
.CreateCriteria<Invoice>()
    .SetProjection(
        Projections.Max(
            new SqlFunctionProjection("SUBSTRING", 
                NHibernateUtil.String, 
                Projections.Property("invoice_id"), 
                Projections.Constant(1), 
                Projections.Constant(5))))
    .UniqueResult();
...