2016-05-16 15 views
1

Ich muss eine NHibernate Abfrage schreiben mit der Firebird SUBSTR Funktion mit , oder . Ich kann es mit oder SQL tun, aber das wären meine letzten Optionen.Abfrage mit der Funktion "SUBSTR" von Firebird

Hat jemand irgendwelche Ideen? Das folgende Beispiel Abfrage würde die SQL sein aus meiner NHibernate-Abfrage:

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

Nun, diese Frage war nicht von einem NHibernate kompetenten Benutzer Sicht als ich vielleicht nicht unklar. Seltsamerweise sieht es so aus, dass keiner der engeren Wähler einen einzigen Punkt in [tag: NHibernate] hat. (Aber vielleicht habe ich ihr Profil ein bisschen zu schnell überprüft.) –

+0

Wie auch immer, Marcos, wenn Sie möchten, dass dies bleibt und nicht gelöscht wird, sollten Sie Ihre Frage vielleicht bearbeiten, um es sogar für Nicht-NH-Benutzer expliziter zu machen. Ich werde zumindest die Syntax bearbeiten, aber als "fremder" Redakteur muss ich vermeiden, zu weit zu gehen, wir müssen die originale OP (Sie) Absicht bewahren. –

+0

Ein bisschen spät, aber ich frage mich, Aufruf '.SubString()' direkt in einem Linq Lambda kann zu einem Aufruf der 'substr 'Firebird-Funktion führen. [tag: linq-to-nhibernate] unterstützt '.SubString()' für Strings. Hast du das probiert? –

Antwort

1

Mit Linq, deklarieren eine SubStr Erweiterungsmethode:

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"); 
    } 
} 

es dann auf Ihre Entitäten verwenden:

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

Vorsicht, wenn Sie versuchen, es zu verwenden, ohne auf eine Entität Bezug zu nehmen, wird dies dazu führen, dass es mit der .Net-Laufzeitumgebung ausgewertet wird, anstatt es in SQL zu übersetzen.

+0

Ich habe mit SAME sql rein, danke für die Hilfe. –