2016-05-16 3 views
1

мне нужно написать NHibernate запрос, используя функцию FIREBIRD SUBSTR с , или . Я могу сделать это с или SQL, но это будут мои последние варианты.запрос с использованием функции «SUBSTR» из Firebird

У кого-нибудь есть идеи? Следующий пример запроса будет одним из SQL в результате моего NHibernate запроса:

SELECT * 
FROM LANCAMENTO 
WHERE SUBSTR(LAN_CD_CONTA, 1, 13) = :paramCd_Conta 
+1

Ну, этот вопрос не был непонятен с точки зрения пользователя с использованием NHibernate, возможно, меня. Как ни странно, похоже, что ни один из более близких избирателей не имеет единственной точки в [tag: NHibernate]. (Но, возможно, я проверю их профиль слишком быстро.) –

+0

В любом случае Маркос, если вы хотите, чтобы это осталось и не удалилось, вы должны отредактировать свой вопрос, возможно, для его более явного представления даже для пользователей, не являющихся членами NH. Я собираюсь редактировать хотя бы синтаксис, но как «чужой» редактор, мне нужно избегать слишком «далеко», мы должны сохранить оригинальное намерение OP (вы). –

+0

Немного поздно, но мне интересно, вызов '.SubString()' непосредственно в лямбда Linq может привести к вызову функции 'substr' Firebird. [tag: linq-to-nhibernate] поддерживает '.SubString()' в строках. Вы пробовали это? –

ответ

1

С Linq, объявить метод расширения SubStr:

using NHibernate.Linq; 

... 

public static class CustomLinqExtensions 
{ 
    [LinqExtensionMethod("SUBSTR")] 
    public static string SubStr(this string dummy, int start, int length) 
    { 
     // No need to implement it in .Net, unless you wish to call it 
     // outside IQueryable context too. 
     throw new NotImplementedException("This call should be translated " + 
      "to SQL and run db side, but it has been run with .Net runtime"); 
    } 
} 

Затем используйте его на ваших лиц:

session.Query<Lancamento>() 
    .Where(l => l.CdConta.SubStr(1, 13) == cdConta) 
    .ToList(); 

Опасайтесь, пытаясь использовать его без ссылки на объект в его использовании, это заставит его получить оценку с .Net runtime вместо того, чтобы перевести его на SQL.

+0

Я сделал с SAME sql pure, спасибо за помощь. –

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