2016-05-16 22 views
1

firebird SUBSTR関数を使用してまたはという関数を使用してNHibernateクエリを書く必要があります。私はまたはSQLでそれをするかもしれませんが、これらは私の最後のオプションです。Firebirdの関数 "SUBSTR"を使用したクエリ

誰にもアイデアはありますか?次の例のクエリは私のNHibernateのクエリの結果SQLのようになります。そして、

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

あなたのエンティティ上でそれを使用します:LINQのでは

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

まあ、この質問はNHibernateの熟練したユーザーの観点からは多分私には分かりませんでした。奇妙なことに、それはより密接な投票者のどれも[タグ:NHibernate]に単一点を持っていないように見える。 (しかし多分私は彼らのプロフィールをちょっと速くチェックしているかもしれません) –

+0

これは残念ですが、削除されたくない場合は、非NHユーザーでも明示的に表示するために質問を編集してください。私は少なくとも構文を編集するつもりですが、 "外国の"エディタとしては、遠すぎることを避けなければなりません。オリジナルのOP(あなた)の意図を保存しなければなりません。 –

+0

ちょっと遅かったですが、Linqラムダで '.SubString()'を直接呼び出すと、 'substr' Firebird関数が呼び出されることがあります。 [tag:linq-to-nhibernate]は文字列で '.SubString()'をサポートします。あなたはそれを試しましたか? –

答えて

1

、SUBSTRの拡張メソッドを宣言し

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

使い方でエンティティを参照せずに使用しようとすると、SQLに変換される代わりに.Netランタイムで評価されることに注意してください。

+0

私はSAME純粋な、助けてくれてありがとう。 –

関連する問題