2013-08-28 4 views
4

Как ограничить запрос длиной свойства string? например. что-то вроде:NHibernate QueryOver ограничивает длину строки

NHSession.QueryOver<Customer>() 
    .Where(p => p.RegistryCode.Length == 8) 
+0

Было бы неплохо, если бы вы добавить несколько деталей к вашему вопросу. – Jost

+0

Не знаю, какую дополнительную деталь я мог бы добавить, это кажется довольно простым вопросом для меня? –

+0

да, ваш вопрос не слишком тяжелый ;-) - но он содержит такие вещи, как «клиент» и константа (например, '8'), которые далее не поясняются. Не волнуйся, все в порядке, как есть, и ты получил свой ответ. – Jost

ответ

4

Нечто подобное может сделать трюк

NHSession.QueryOver<Customer>() 
    .Where(
     Restrictions.Eq(
      Projections.SqlFunction("length", NHibernateUtil.String, 
       Projections.Property<Customer>(x => x.RegistryCode)), 
      8 
     ) 
    ) 
+0

Спасибо, работал, хотя мне пришлось использовать «длину» вместо «len», как [этот ответ] (http://stackoverflow.com/questions/9246626/nhibernate-support-the-function-len) –

+0

@ dänjel: рад, что это сработало, исправил мой ответ;) –

1

Вместо «NHibernateUtil.String» я должен использовать этот тип «NHibernateUtil.Int16», так как параметр «длина» всегда должен быть числом, а не строкой.

Что-то вроде этого:

NHSession.QueryOver<Customer>() 
    .Where(
     Restrictions.Eq(
      Projections.SqlFunction("length", NHibernateUtil.Int16, 
       Projections.Property<Customer>(x => x.RegistryCode)), 
      8 
     ) 
    ) 
+0

Почему это должно быть лучше? Пожалуйста, объясни. – Alexander

+0

На мой взгляд, длина возвращает int не строку. Но это nhibernate sql action, это не имеет большого значения. –

Смежные вопросы